所以我在 C 中玩递归,我不知道为什么会这样:
代码 A
int foo(int x)
{
if (x==0) return 0;
else return foo(--x)+x;
}
int main() { printf("%d\n", foo(10));
代码 B
int foo(int x)
{
if (x==0) return 0;
else return foo(x--)+x;
}
int main() { printf("%d\n", foo(10));
代码 A 打印 45 而不是 55,我想通了。这是因为递归调用以这种方式展开:9+8+7+...+0 = 45
另一方面,代码 B 被卡住并且永远不会返回提示!我必须这样ctrl+c
做。为什么会卡住?是因为它从不超过 10 吗?