我正在尝试编写一个可以递归计算1 + 2 + 3 ... + n的程序。我刚开始学习C,所以我很糟糕。 这是我现在拥有的:
#include <stdio.h>
int adder;
adder=1;
int sum(int numba) {
if (adder==numba) {
return(sum);
}
return(sum+adder);
++adder;
}
int main() {
char line[100];
int nummba;
printf("Enter in a number: ");
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", nummba);
printf("The sum of numbers from 1 to %d is %d.", nummba, sum(nummba));
return(0);
}
显然不起作用... 如何使用递归求解1 + 2 + 3 ... n? 谢谢。
答案 0 :(得分:2)
对于初学者而言,无需使用全局变量。
接下来是这些陈述
return(sum);
和
return(sum+adder);
sum
是指向函数的指针。因此return语句的表达式没有任何意义。
此外,此代码段
int adder;
adder=1;
甚至不会编译,因为您可能不会在文件范围内使用语句。至少你应该写
int adder = 1;
该函数的外观如下
unsigned long long int sum( unsigned int n )
{
return n == 0 ? 0 : n + sum( n - 1 );
}
这是一个演示程序。
#include <stdio.h>
unsigned long long int sum( unsigned int n )
{
return n == 0 ? 0 : n + sum( n - 1 );
}
int main(void)
{
printf( "Enter in a non-negative number: " );
unsigned int n = 0;
scanf( "%u", &n );
printf( "The sum of numbers from 0 to %u is %llu.\n", n, sum( n ) );
return 0;
}
其输出可能看起来像
Enter in a non-negative number: 10
The sum of numbers from 0 to 10 is 55.
答案 1 :(得分:1)
递归要求函数调用自身。您没有这样做,因此首先没有递归函数。考虑以下代码:
#include <stdio.h>
int sum(int n) {
if (n == 0)
return n;
else
return n + sum(n - 1);
}
int main() {
int n;
char line[100];
printf("Enter in a number: ");
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &n);
printf("The sum of numbers from 1 to %d is %d.\n", n, sum(n));
return(0);
}
如果现在发现递归有点困难,则可以使用while
循环来选择难度较小的解决方案:
int sum(int n)
{
int i = 0;
int j = 1;
while (j <= n)
{
i += j++;
}
return i;
}
答案 2 :(得分:0)
将代码更改为:
#include <stdio.h>
int sum_val=0;
void sum(int numba)
{
if(numba>=1)
{
sum_val=sum_val+numba;
sum(numba-1);
}
}
int main()
{
int nummba;
printf("Enter in a number: ");
scanf(" %d",&nummba);
sum(nummba);
printf("The sum of numbers from 1 to %d is %d.", nummba, sum_val);
return(0);
}
您编译代码了吗?