-2

我的函数获取一个数字并返回输入之前的数字之和,包括输入;但是,我想知道是否可以计算从 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));
}
4

1 回答 1

2

所有小于n和大于的整数之和0可以用

 int sum = (n*(n+1))/2

它的开销比递归函数少得多。但是如果你真的想要那么你的功能看起来是正确的,我会添加一些花括号:

int sum(int x){
  if(x>0) {
    return x+sum(x-1);
  }
  else {
    return 0;
  }
}

上述函数的问题在于,它使用堆栈进行记忆,因此您可能无法计算大ns。您可以使函数尾递归:

int sum(int x, int sum){
  if(x>0) {
    return sum(x-1, sum + x);
  }
  else {
     return sum;
  }
}

这不会使用堆栈来记住您的中间和。然而,一个简单的循环可能会更好,如果你想让它看起来非常神秘和有效,你可以这样做:

int sum = (n*(++n))>>1
于 2013-11-10T00:08:20.920 回答