1

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

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

6 回答 6

7

--myFunc在您使用它时是一个后减运算符,并且仅在使用 的值调用后才生效n,因此您将myFunc一遍又一遍地使用相同的值调用。

将其用作预递减运算符将修复您的特定用例:与之前上线myFunc(--n)的效果相似n=n-1

于 2013-04-05T21:14:32.507 回答
4

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

于 2013-04-05T21:14:53.720 回答
3

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

如果你这样做myFunc(--n);,它会起作用

于 2013-04-05T21:14:39.547 回答
3

n--传递给n 递减,因此每次调用时都会收到相同的值。nmyFunc()myFuncn

于 2013-04-05T21:14:54.450 回答
1

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

于 2013-04-05T21:41:40.183 回答
0

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

于 2013-04-05T21:41:13.067 回答