2015-11-05 77 views
-3

我正在编写一个涉及链表的程序。我写了一个函数,它返回链表中的第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; 
} 

这个函数有什么问题?让我知道你是否需要更多的细节或代码。

+1

'n'有多大? – NathanOliver

+0

到目前为止,它仅仅是最大的10 – KOB

+0

崩溃如何?什么是错误信息? –

回答

4

递归是无限的。在每次致电get_nth时,您都会启动一个循环,最初调用get_nth(1),这将调用get_nth(1),并且将调用get_nth(1) ...直到堆栈空间用完。

解决方案提示:递归线性搜索不需要循环。

+0

这很有道理,谢谢。因此,本工作的一些内容如下: 在get_nth函数之外设置counter = 1。如果'counter == n'返回节点的'if'语句。调用'get_nth(counter + 1)'的'else'语句? – KOB

+0

@KOB您不能从列表头开始递归调用,所以您应该将节点传递给递归搜索。首先打电话给头部,下一个头部 - >下一个。通过节点,传递计数器并递归递减。当你用0调用它时,返回节点。 – user2079303

+0

@KOB如果n大于0,则从当前节点查找第n个节点与查找下一个节点的第(n-1):th节点相同。不要使用全局变量。不要使用循环。 – molbdnilo

5

没有什么阻止递归(除其他外,有一个递归调用与n增加到n + 1

这是您的溢出堆栈,程序会崩溃作为一个结果。