为什么以下程序会进行无限循环?

Ras*_*yak 1 c++ recursion decrement

当我执行这个belo程序时,它正在5无意中打印.为什么?是因为减量没有发生还是在减量发生之前函数调用正在发生?

我尝试了替代方式制作fun(--n),它给了我正确的答案.但为什么它不起作用fun(n--)

void fun(int n)
{
    if(!n)
    {
        cout << n << " " << endl;
    }
    else
    {
        cout << n << " "<<endl;
        fun(n--);
    }
}

int main()
{
    int n = 5;
    fun(n);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

No *_*ame 7

你需要做foo(--n)而不是foo(n--)

  • --n将递减n的值,然后发送递减的值
  • n--将递减n的值,但发送预递减的值.

所以,当你这样做时,你foo(n--)可以减去n的值,但是向foo函数发送n bofore递减.你可以猜到这将永远存在

void fun(int n)
{
    if(!n)
    {
        cout << n << " " << endl;
    }
    else
    {
        cout << n << " "<<endl;
        fun(--n);
    }
}

int main()
{
    int n = 5;
    fun(n);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

了解更多关于的区别n----n阅读这里