为什么这个递归函数会产生无限循环?

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);
    }  
}