inf*_*oop 2 c recursion decrement
所以我正在玩C中的递归,我不知道为什么会发生这种情况:
代码A.
int foo(int x)
{
if (x==0) return 0;
else return foo(--x)+x;
}
int main() { printf("%d\n", foo(10));
Run Code Online (Sandbox Code Playgroud)
代码B.
int foo(int x)
{
if (x==0) return 0;
else return foo(x--)+x;
}
int main() { printf("%d\n", foo(10));
Run Code Online (Sandbox Code Playgroud)
代码A打印45而不是55,我想出来了.这是因为递归调用以这种方式解开:9+8+7+...+0 = 45
另一方面,代码B卡住了,永远不会返回提示!我必须这样ctrl+c做.为什么会卡住?是因为它从未减少到10岁?
那是因为在片段中,在递归调用之后,B x会递减,因此总是使用foo调用该函数(10)
编辑:
正如James McNellis在其评论中指出的那样,x在调用函数之前会减少,但是它的原始值在调用中使用而不是在递减时使用.
基本上表达式x--在foo(x--)之前被计算,但它的值实际上是x,因此函数被调用x = 10
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |