递归函数在运行时崩溃
我正在编写一个涉及链表的程序。我写了一个函数,它返回链表中的第n个节点,它会递归地调用它自己。我的程序编译并运行直到递归函数,然后崩溃。这里是节点的构造函数以及递归函数:递归函数在运行时崩溃
LinkedList::LinkedList():
head(head){
sizeInt = 0;
}
Node* LinkedList::get_nth(const int& n) const {
Node* node = new Node();
for(int counter = 1; counter <= n; counter++){
node = get_nth(counter + 1);
}
return node;
}
这个函数有什么问题?让我知道你是否需要更多的细节或代码。
递归是无限的。在每次致电get_nth
时,您都会启动一个循环,最初调用get_nth(1)
,这将调用get_nth(1)
,并且将调用get_nth(1)
...直到堆栈空间用完。
解决方案提示:递归线性搜索不需要循环。
这很有道理,谢谢。因此,本工作的一些内容如下: 在get_nth函数之外设置counter = 1。如果'counter == n'返回节点的'if'语句。调用'get_nth(counter + 1)'的'else'语句? – KOB
@KOB您不能从列表头开始递归调用,所以您应该将节点传递给递归搜索。首先打电话给头部,下一个头部 - >下一个。通过节点,传递计数器并递归递减。当你用0调用它时,返回节点。 – user2079303
@KOB如果n大于0,则从当前节点查找第n个节点与查找下一个节点的第(n-1):th节点相同。不要使用全局变量。不要使用循环。 – molbdnilo
没有什么阻止递归(除其他外,有一个递归调用与n
增加到n + 1
)
这是您的溢出堆栈,程序会崩溃作为一个结果。
'n'有多大? – NathanOliver
到目前为止,它仅仅是最大的10 – KOB
崩溃如何?什么是错误信息? –