我目前正在编写一个程序,以返回从自身减去的数字的所有加法(例如,如果 3 是数字,则输出应该是 6 (3+2+1)。本质上,我试图让函数返回数字的排列,但使用加法,而不是乘法。这对于递归函数来说似乎是一个完美的情况(我很难理解这一点),我希望返回值不相关(在期间)。 while 循环),因为信息直接包含在变量中(具体来说,静态 b)然而,当我将函数中的 while 循环更改为 b 以外的任何值时,函数返回错误的值到 main( ) - 它总是 0。更令人困惑的是,当我执行 b 的 printf 时,就在(第二个 - while 循环之外)b 返回值返回之前,我的函数打印正确的值(无论返回值如何)为什么我的函数必须在 while 循环(第一个返回函数)中返回 b 才能返回正确的值,即 55 (10+9+8+7+6+5+4+3+2+1)。 +0)?
代码如下,可以正常运行。
#include <stdlib.h>
#include <stdio.h>
int sumyears(int a)
{
static int b=0;
while(a>0)
{
b+=a;
sumyears(a-1);
return b; //Program works correctly when I return b, but not when I return any other value, including a
}
printf("%d", b); //Program will always print correct value, but return different values based upon the return value in the while loop
return b;
}
int main()
{
printf("%d", sumyears(10));
}
对于递归函数来说似乎是一个完美的情况(我很难理解)
您想要计算
n
之前的所有整数的总和。
n == 0
,那么总和显然是0
(0 + 1 + ... + n) = (0 + 1 + ... + (n - 1)) + n
,即sumOfIntsUpTo(n) = sumOfIntsUpTo(n - 1) + n
。作为递归函数:
#include <stdlib.h>
#include <stdio.h>
int sumIntsUpTo(int a) {
return (a <= 0) ? 0 : (sumIntsUpTo(a - 1) + a);
}
int main() {
printf("%d", sumIntsUpTo(10));
}
当然有一个众所周知的显式公式。
我不知道你从哪里想到在递归函数中使用
static
的想法,但我建议放弃这个源(删除链接/烧掉这本书/不要和提出这个建议的奇怪人说话) ).