以下代码导致无限循环。 a的值似乎不会低于1。请帮助。
int main()
{
init(4);
return 0;
}
void init(int a)
{
int j;
cout<<"After declaring: "<<j;
j = a;
cout<<"After initializing: "<<j;
a--;
while(a>0)
{
init(a);
}
}
答案 0 :(得分:1)
首先,您正在访问一个未初始化的变量。这将未定义的行为引入程序。我将删除此部分。
第二,您的while
循环运行的时间与a > 0
一样长,但是在循环的主体中,a
的值从未更改。请注意,在调用init
时,将按值传递参数a
,即复制a
的值。 init
的每个实例都将拥有自己的a
,并且永远不会更改调用方的a
的值。
通常使用递归函数代替循环。但是,您需要一个“锚”来告诉递归在哪里停止:
void init(int a)
{
int j = a;
cout<<"After initializing: " << j;
if (a>0) {
init (a-1);
}
}