为什么这个递归函数会产生无限循环?
Why is this recursive function creating an infinite loop?
以下代码导致无限循环。 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);
}
}
首先,您正在访问一个未初始化的变量。这会在您的程序中引入未定义的行为;我会删除此部分。
其次,您的 while
循环运行的时间与 a > 0
一样长,但是在循环体中,a
的值永远不会改变。注意调用init
时,参数a
是传值的,即复制a
的值; init
的每个实例都将获得它自己的 a
,并且它永远不会更改调用者的 a
的值。
通常使用递归函数而不是循环。然而,你需要一个 "anchor" 来告诉递归在哪里停止:
void init(int a)
{
int j = a;
cout<<"After initializing: " << j;
if (a>0) {
init (a-1);
}
}
以下代码导致无限循环。 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);
}
}
首先,您正在访问一个未初始化的变量。这会在您的程序中引入未定义的行为;我会删除此部分。
其次,您的 while
循环运行的时间与 a > 0
一样长,但是在循环体中,a
的值永远不会改变。注意调用init
时,参数a
是传值的,即复制a
的值; init
的每个实例都将获得它自己的 a
,并且它永远不会更改调用者的 a
的值。
通常使用递归函数而不是循环。然而,你需要一个 "anchor" 来告诉递归在哪里停止:
void init(int a)
{
int j = a;
cout<<"After initializing: " << j;
if (a>0) {
init (a-1);
}
}