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

时间:2013-04-05 21:13:11

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

6 个答案:

答案 0 :(得分:7)

--是一个后递减运算符,因为您正在使用它,只有在myFunc调用n之后才会生效,因此您将调用myFunc一遍又一遍地使用相同的值。

将它用作预递减运算符可以修复您的特定用例:myFunc(--n)会产生类似于将n=n-1置于该行之前的效果。

答案 1 :(得分:4)

n--调用后缀操作,这意味着n的值传递给myFunc。之后,n的值减1。 调用myFunc( - n)。

答案 2 :(得分:3)

因为在调用之后执行了减量。不是之前。

如果你改为myFunc(--n);,它将起作用

答案 3 :(得分:3)

n--传递给n后,

n递减myFunc() ,因此myFunc正在接收相同的n {{1}}每次调用时都会有值。

答案 4 :(得分:1)

n - 和--n是不同的。 您应该查找C运算符和序列点以获得解释。 基本上,n--表示'使用n并在下一个序列点递减它', 而--n表示'首先递减n然后再使用它'..

答案 5 :(得分:0)

N--是postfix运算符。这意味着它将在使用该值后增加您使用它的变量。例如,在表达式x * y--中,编译器将返回x * y,然后递减y。