这段代码有什么问题?这是我正在做的简化版本。它是一个递归函数调用同一个变量。
#include <iostream>
using namespace std;
void Foo(int& x)
{
x++;
Foo(x);
cout<<x<<"\n";
if(x==10)
return;
}
int main()
{
int x=0;
Foo(x);
return 0;
}
答案 0 :(得分:3)
此函数没有终止条件,它只是无条件地调用自己,尝试设置无限递归:
void Foo(int& x)
{
x++;
Foo(x); // <==== UNCONDITIONALLY RECURSIVE
cout<<x<<"\n";
if(x==10)
return;
}
由于每个函数调用的堆栈帧占用一些内存空间,因此无法进行无限递归:迟早,您的堆栈将超出其限制大小,并且您的程序将被强制终止。
答案 1 :(得分:3)
x++;
Foo(x);
cout<<x<<"\n";
if(x==10)
return;
问题是这会导致无限递归。您只能在函数调用之后检查if (x == 10)
,因此无法进入返回条件。通过编写
x++;
if(x==10)
return;
Foo(x);
cout<<x<<"\n";
答案 2 :(得分:1)
你有一个无限的递归。它将继续创建堆栈帧,直到堆栈空间耗尽。在递归调用之前,您需要一个退出警戒:
void Foo(int& x)
{
cout<<x<<"\n";
if(x==10)
return;
x++;
Foo(x);
}