我正在编写一个涉及链表的程序。我编写了一个函数,它返回链表中的第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;
}
这个功能有什么问题?如果您需要更多详细信息或代码,请与我们联系。
答案 0 :(得分:5)
没有任何东西可以阻止递归(除其他外,还有一个递归调用,n
增加到n + 1
。)
这会溢出你的堆栈,程序将因此而崩溃。
答案 1 :(得分:4)
递归是无限的。每次调用get_nth
,您都会启动一个最初调用get_nth(1)
的循环,然后调用get_nth(1)
并调用get_nth(1)
...直到堆栈空间耗尽。< / p>
提示解决方案:递归线性搜索不需要循环。