在C语言中接收函数调用

在C语言中接收函数调用,c,recursion,function-call,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 } 这不是递归,而是永不结束的while循环 while (val>0) { x=x+bar(val-1); } 在此循环中,您永远不会更改val的值。所以

为什么这个递归函数落在无限循环中?它显示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的值,并更改了循环变量

注意另一件事:假设拼写错误
Val
Val
,如果它们是同一个变量,则返回值将始终为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;
}
#包括
int Bar(int val)//传递的值为3
{
int x=0;
while(val>0)
{
x=x+Bar(-val);
}
printf(“%d\n”,val);
返回val;
}
内部主(空)
{
酒吧(3);
返回0;
}

请提供正确的示例。由于大写字母、大括号丢失等原因,您的代码无法编译。您的递归将正确终止,但在每个递归级别上都会创建一个内循环。
Val
和`Val是否应该是相同的变量?或者他们是不同的?@Gerhardh他们是一样的。你的意思是,如果有“val--”的话,终止是正确的选择吗?@Raviragardi:是的,这将是一个有效的选择,至少是“正式的”。同样,在x=x+bar(这里)中,如果我们把val放进去,它说的是异常终止。原因是什么。@RavirajGardi在这种情况下,您需要在调用函数之前使用
--val
递减该值。否则,您将始终使用相同的值调用,并且永远不会终止递归。(但循环将终止。)