Recursion C中的递归无法从原型返回结果!?
我不知道为什么这个递归不起作用!我试图得到从I=0到n的输入的总数。我也在测试递归,而不是“for循环”,看看它是如何执行的。程序运行正常,但输入后停止。如果您有任何意见,我将不胜感激,谢谢Recursion C中的递归无法从原型返回结果!?,recursion,Recursion,我不知道为什么这个递归不起作用!我试图得到从I=0到n的输入的总数。我也在测试递归,而不是“for循环”,看看它是如何执行的。程序运行正常,但输入后停止。如果您有任何意见,我将不胜感激,谢谢 int sigma (int n) { if (n <= 0) // Base Call return 1; else { printf ("%d", n); int sum = sigma( n+sigma(n-1) );
int sigma (int n)
{
if (n <= 0) // Base Call
return 1;
else {
printf ("%d", n);
int sum = sigma( n+sigma(n-1) );
return sum;
}
// recursive call to calculate any sum>0;
// for example: input=3; sum=(3+sigma(3-1)); sum=(3+sigma(2))
// do sigma(2)=2+sigma(2-1)=2+sigma(1);
// so sigma(1)=1+sigma(1-1)=1+sigma(0)=1;
// finally, sigma(3)=3+2+1+0=6
}
int main (int argc, char *argv[])
{
int n;
printf("Enter a positive integer for sum : ");
scanf( " %d ", &n);
int sum = sigma(n);
printf("The sum of all numbers for your entry: %d\n", sum);
getch();
return 0;
}
intsigma(intn)
{
if(n0;
//例如:输入=3;总和=(3+西格玛(3-1));总和=(3+西格玛(2))
//do西格玛(2)=2+西格玛(2-1)=2+西格玛(1);
//因此,西格玛(1)=1+西格玛(1-1)=1+西格玛(0)=1;
//最后,西格玛(3)=3+2+1+0=6
}
int main(int argc,char*argv[])
{
int n;
printf(“为sum:”输入一个正整数);
scanf(“%d”和“&n”);
整数和=西格玛(n);
printf(“您输入的所有数字的总和:%d\n”,总和);
getch();
返回0;
}
更改
int sum=sigma(n+sigma(n-1));
到
int sum=n+sigma(n-1);
正如您所写的,调用sigma(3)
然后调用sigma(5)
,等等
另外,从防护罩中返回0,而不是1。我认为应该是
int sum = n + sigma(n-1)
我不明白你所说的“程序正常运行,但在输入后停止”是什么意思。它只是不断地向sigma添加参数,直到我认为它最终耗尽内存。这是因为你递归地调用sigma(sigma)在你的代码中。看到下面的答案。让
if
分支返回0而不是1。天哪!我不敢相信自己没有看到:)感谢大家的快速回复!