我正在尝试了解递归。我不明白为什么下面的代码在无限循环中运行?
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);
}
答案 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。