cam*_*man 3 c recursion segmentation-fault
这段代码给了我一个seg错误,但当我改变它时x--
,--x
它打印正确.
他们不一样????
int main()
{
myFunc(5);
return 0;
}
void myFunc (int x) {
if (x > 0) {
myFunc(x--);
printf("%d, ", x);
}
else
return;
}
Run Code Online (Sandbox Code Playgroud)
Mys*_*ial 13
不,他们不一样.
x--
和之间的区别在于--x
返回值是在减量之前还是之后.
在myFunc(x--)
,x--
返回旧值.所以myFunc()
称为可重复性具有相同的值 - >无限递归.
在myFunc(--x)
,--x
返回新值.因此myFunc()
每次调用的次数减少 - >无无限递归.
如果你移动printf
到函数调用的开头会更容易看到这个:
void myFunc (int x) {
printf("%d, ", x);
if (x > 0) {
myFunc(x--);
}
else
return;
}
Run Code Online (Sandbox Code Playgroud)
输出:(用10调用时)
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, ...
Run Code Online (Sandbox Code Playgroud)