我正在从 C 迁移到 Java,我在递归方面遇到困难,特别是因为在 Java 中你不能通过引用传递参数。
我正在寻找的不是强制 Java 通过引用传递参数的解决方案/技巧,而是在 Java 中解决此类问题的推荐方法。
让我们以二叉树中的递归节点插入为例:
void nodeInsert(Node n, int a) {
if (n == null)
n = new Node(a);
...
}
在 C 语言中,执行结束时,树中的节点 n
将指向新创建的节点。然而,在 Java 中,n
仍将是 null
(因为 n 是按值传递的)。
对于此类问题,建议使用什么 Java 方法? 我已经尝试过的一些方法:
- 使用静态对象来跟踪父对象(使用泛型时问题会变得复杂)。
- 将父节点作为函数的一部分传递。它可以工作,但会使代码有点复杂,而且看起来不是一个好的解决方案。
- 创建一个指向父节点的附加成员,但这不是一个好的解决方案,因为它增加了 O(n) 所需的空间;
欢迎提出任何建议。
最佳答案
在 Java 中,我们不使用引用变量,而是使用返回 值并将其分配给必须更改的变量。
Node nodeInsert(Node n, int a) {
if (n == null){
n = new Node(a);
return n;
}
else
{
....
return nodeInsert(n,a); //this is how a recursion is done.
....
}
}
如果您需要更多关于递归的信息 http://www.toves.org/books/java/ch18-recurex/会教你正确的。
关于Java 递归 - 传递引用的替代方法 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40298855/