使用树递归的Java函数问题

问题描述 投票:-1回答:2

在将代码从Racket转换为Java时遇到问题。

[我在球拍中编写了一个过程,用于解决3D版本的“曼哈顿街”问题。

问题是,在Racket中,创建树型递归来解决该问题非常容易,而在Java中,我遇到了一些问题。我了解到应该在Java中使用Nodes进行树递归,但是我不知道它们如何工作。有任何提示吗?

这是我需要在Java中翻译的原始Racket代码:

(define (manhattan-3d i j k)
    (cond
      [(and (= i 0) (= j 0)) 1]
      [(and (= i 0) (= k 0)) 1]
      [(and (= j 0) (= k 0)) 1]
      [(or (= i -1) (= j -1) (= k -1)) 0]
      [(or (and (> i 0) (> j 0)) (and (> i 0) (> k 0)) (and (> j 0) (> k 0))) (+ (manhattan-3d (- i 1) j k) (manhattan-3d i (- j 1) k) (manhattan-3d i j (- k 1)))]
     )
  )

您可以看到,在Racket中,这是一个非常简单且简短的过程,但是我不知道如何在Java中解决它。

感谢您的任何帮助!

java function recursion tree racket
2个回答
0
投票

我在此代码中看不到任何树。

虽然我不知道球拍,但是代码似乎足够容易理解。

看来您所需要的只是几个条件:

public static int manhattan3d (int i, int j, int k) 
{
    if (i == 0 && j == 0)
        return 1;
    else if (i == 0 && k == 0)
        return 1;
    else if (j == 0 && k == 0)
        return 1;
    else if (i == -1 || j == -1 || k == -1)
        return 0;
    else
        return manhattan3d (i - 1, j, k) + manhattan3d (i, j - 1, k) + manhattan3d (i, j k - 1);
}

0
投票

您应在Java中使用Nodes。

java中的Node类是至少包含名称和称为子节点的节点列表的类。

enter image description here

这里节点1具有2和3作为其子节点。

节点2具有4和5作为其子节点,...

树的每个节点都是类节点的一个实例。要转到节点,您必须使用递归方法。

对不起,我的英语不好,希望对您有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.