在将代码从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中解决它。
感谢您的任何帮助!
我在此代码中看不到任何树。
虽然我不知道球拍,但是代码似乎足够容易理解。
看来您所需要的只是几个条件:
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);
}