我的函数得到一个数字并返回输入前的数字之和,包括输入;但是,我想知道是否有可能计算从1开始到n结束的连续整数之和(作为输入)
#include<stdio.h>
int sum(int x){
if(x>0)return x+sum(x-1);
else return 0;
}
main(){
int x;
scanf("%d",&x);;
printf("%d\n\n",sum(x));
}
我找到了我的问题的答案,但stackoverflow.com不让我回答。所以,我会在这里回答:
这很简单,它只需要另一个增量参数,另一个需要跟踪输入值。
#include<stdio.h>
int sum(int x,int t){
if(t<=x) return t+sum(x,t+1);
else return 0;
}
main(){
int x;
printf("enter int: ");
scanf("%d",&x);
printf("%d\n",sum(x,0));
}
答案 0 :(得分:2)
可以找到小于n
且大于0
的所有整数的总和
int sum = (n*(n+1))/2
其开销比递归函数少得多。但是如果你真的想要那么你的功能看起来是正确的,我会添加一些花括号:
int sum(int x){
if(x>0) {
return x+sum(x-1);
}
else {
return 0;
}
}
上述函数的问题在于使用堆栈进行记忆,因此您可能无法计算大n
秒。你可以使你的函数尾递归:
int sum(int x, int sum){
if(x>0) {
return sum(x-1, sum + x);
}
else {
return sum;
}
}
这不会使用堆栈记住你的中间总和。然而,一个简单的循环可能更好,如果你希望它看起来非常神秘和有效,你可以这样做:
int sum = (n*(++n))>>1