在C中接收函数调用

时间:2018-12-17 11:14:18

标签: c recursion function-call

为什么此递归函数陷入无限循环?它显示Val的值没有下降。背后的逻辑是什么?

int Bar(int Val) // value passed is 3
{
    int x=0;
    while (Val>0)
    {
        x=x+Bar(val-1);
    }
    return Val
}

2 个答案:

答案 0 :(得分:5)

这不是递归,而是while循环永远不会结束。

while (val>0) {  
  x=x+bar(val-1);
}

在此循环中,您永远不会更改val的值。因此循环永远不会终止。

答案 1 :(得分:1)

@linuxfan是正确的。

也许您想执行以下操作:

while (val>0) {  
  x=x+bar(--val);
}

都将值传递的值减小1并更改循环变量。

请注意另一件事:假设您拼写错误的Valval,如果它们是相同的变量,则返回值将始终为0,因为循环在val为0时终止,然后返回值。

尝试以下代码:

#include<stdio.h>
int Bar(int val) // value passed is 3
{
    int x=0;
    while (val>0)
    {
        x=x+Bar(--val);
    }
    printf("%d\n", val);
    return val;
}

int main (void)
{
  Bar(3);
  return 0;
}