【发布时间】:2020-06-02 11:18:08
【问题描述】:
我在将代码从 Racket 转换为 Java 时遇到问题。
我在 Racket 中编写了一个程序,用于解决“曼哈顿街道”问题的 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 中解决它。
感谢任何形式的帮助!
【问题讨论】:
-
出于好奇,您是否尝试过直接翻译它,只使用
ints?因为我在这段代码中看不到任何不能直接翻译成Java的东西。在 Java 中使用递归的主要风险是它不执行尾部调用消除,但在这种情况下似乎也不会。
标签: java function recursion tree racket