为什么这个函数在无限循环中运行?
问题描述:
我想了解递归。我不明白为什么下面这段代码在无限循环中运行?为什么这个函数在无限循环中运行?
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);
}
答
--
是一个递减运算符,如您正在使用它,只有生效myFunc
被调用的n
值后,所以你会用相同的值一遍一遍地呼唤myFunc
。
使用它作为预递减运营商将解决您的特定使用案例:myFunc(--n)
将不得不把n=n-1
上线之前,类似的效果。
答
因为调用之后进行递减。之前没有。
如果你这样做myFunc(--n);
相反,它会工作
答
N--调用后缀操作,这意味着n的值被传递到myFunc的。之后,n的值减1。 调用myFunc( - n)。
答
n--
递减n
传递给myFunc()
n
后,所以myFunc
正在接收每次调用时间相同n
值。
答
N--是postfix
运营商。这意味着它将在使用该值之后递增您正在使用的变量。例如,在表达式x * y--
中,编译器将返回x * y
,然后递减y。
答
n - 和 - n是不同的。 您应该查看C操作员和序列点的解释。 基本上,N--手段“使用n和在下一序列点递减它”, 而--n手段“递减n个第一,然后用它” ..