我正在制作一个递归函数,它必须没有参数才能获取链表的长度。
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/