为什么此递归函数会创建一个无限循环?

时间:2018-08-11 15:48:12

标签: c++ recursion 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);    
    }   
}

1 个答案:

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