在 C 中接收函数调用

Receive function call in C

为什么这个递归函数会陷入死循环?它表明 Val 的价值并没有减少。这背后的逻辑是什么。

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

不是递归,而是永不结束的while循环

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

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

@linuxfan 是对的。

也许您想执行以下操作:

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

既传值减1又改变循环变量

注意另一件事:假设您拼错了 Valval,如果它们是同一个变量,则返回值将始终为 0,因为当 val 为 0 时循环终止,然后returns这个值。

试试这个代码:

#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;
}