为什么这个函数在无限循环中运行?

use*_*000 1 c

我想学习递归.我不明白为什么下面的代码在无限循环中运行?

void myFunc(int n)
{
     if(n==0)
         return;
     else
     {
         printf("%d\n",n);
         myFunc(n--); //if I put n=n-1 before this line then it is running fine and will exit from the function .
         printf("%d\n",n); 
     }

}

int main()
{

    myFunc(4);
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ene 7

--当你使用它时,它是一个后递减运算符,只有在myFunc用值值调用后生效n,所以你将myFunc一遍又一遍地调用相同的值.

使用它作为预递减运算符将修复您的特定用例:myFunc(--n)将具有类似于n=n-1之前放线的效果.