使用树递归的Java函数存在问题

使用树递归的Java函数存在问题,java,function,recursion,tree,racket,Java,Function,Recursion,Tree,Racket,我在将代码从Racket翻译成Java时遇到了问题 我在Racket中写了一个程序,解决了3D版的“曼哈顿街道”问题 问题是,在Racket中,创建树型递归来解决问题非常容易,而在Java中,我遇到了一些问题。 我学会了在Java中使用节点进行树递归,但我不知道它们是如何工作的。 有什么提示吗 以下是我需要用Java翻译的原始Racket代码: (define (manhattan-3d i j k) (cond [(and (= i 0) (= j 0)) 1]

我在将代码从Racket翻译成Java时遇到了问题

我在Racket中写了一个程序,解决了3D版的“曼哈顿街道”问题

问题是,在Racket中,创建树型递归来解决问题非常容易,而在Java中,我遇到了一些问题。 我学会了在Java中使用节点进行树递归,但我不知道它们是如何工作的。 有什么提示吗

以下是我需要用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中解决它


感谢您的任何帮助

我在这段代码中没有看到任何树

虽然我不知道racket,但代码似乎足够容易理解

看起来您只需要几个条件:

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);
}

您应该使用java中的节点来创建树

java中的节点类至少包含一个名称和一个名为childrens的节点列表

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

节点2有4和5作为其子节点


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

出于好奇,您是否尝试过直接使用
int
s翻译它?因为我在那段代码中没有看到任何不能直接翻译成Java的东西。在Java中使用递归的主要风险是,它不会执行尾部调用消除,但在这种情况下,它似乎也不会执行racket。“你应该使用Java中的节点。”为什么?不在这里?抱歉,我编辑了以解决这个问题,但我认为询问者想知道如何创建树。我找到了一个类似的解决方案……但你的解决方案确实有效。非常感谢。