java - 在递归函数中初始化变量

标签 java variables recursion linked-list initialization

我正在制作一个递归函数,它必须没有参数才能获取链表的长度。

public int lengthHelper() {
    if (first == null) {
        return 0;
    } else {
        first = first.next;
        return 1 + length();
    }
}

问题是,通过使用first=first.next我会首先毁掉,首先是我的标题。所以我想首先在函数内复制(而不是丑陋的包装脚本),但递归使这变得很麻烦。知道如何继续吗?

这是我想删除的包装器:

public int length() {
    Node temp = copy(first);
    int output = this.lengthHelper();
    first = copy(temp);
    return output;
}

我有这些限制的原因是因为这是基于任务的个人挑战。递归+包装器就足够了,但从那以后我一直在思考是否有可能以更简洁的方式解决它。

最佳答案

如果我理解正确的话first是递归数据结构Node,并且在非递归容器类List(例如)中你需要定义一个递归方法(不带参数)。

那么解决方案是在 List 中使用一个方法来生成一个新的尾部/其余部分列表,而没有 first。下面我假设一个带有 Node 的构造函数。

class Node { }
public class List {
    Node first;

    public int length() {
        if (first == null) {
            return 0;
        } else {
            List tail = new List(first.next);
            return 1 + tail.length();
        }
    }

关于java - 在递归函数中初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855837/

相关文章:

java - 引用音乐应用程序

java - 如何自动构建混合的 Scala\Java Eclipse 工作区?

java - 如何在 Java 中设置本地服务器以进行流式传输?需要建议

Java 堆间接访问

java - 字符串比较未正确返回?

python - 从命令式编程到函数式编程的转换 [Python 到标准 ML]

python - 如何递归字典并动态更新值以便以后可以引用它们?

mysql - 如何将 shell 命令的结果分配给 MySQL 变量?

javascript - 无法在基于 JavaScript 的游戏中初始化全局变量

bash - 递归调用函数时如何阻止bash创建子shell