Java 递归 - 传递引用的替代方法 :

标签 java recursion pass-by-value

我正在从 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/

相关文章:

java - 在 Google App Engine Java 应用程序中加载自定义 keystore

java - 数据库连接 ClassNotfoundException

java - 我该如何着手弄清楚这个复杂的递归算法?

java - 使用 JNA 在 Clojure 中按值获取和传递结构

c - 如何修改已传递给 C 函数的指针?

java - Spring Boot 桌面独立应用程序中的 Apache Shiro

java - JTextPane 中重叠突出显示的文本颜色

java - 通过扫描文件系统查找直接和间接子类

recursion - 互递归函数中的尾递归

java - Java 是 "pass-by-reference"还是 "pass-by-value"?