递归函数,用于对两个其他数字之间的数字求和

时间:2015-01-29 11:10:59

标签: c recursion

我想在两个其他数字之间加总每个数字(例如1到5将是sum = 9,2 + 3 + 4),但我的函数总是返回0而且老实说我不明白为什么。 希望你能帮助我,谢谢。 这是我的代码:

#include <stdio.h>

int inbetween_sum (int N1, int N2);

int main (int argc, char **argv) {
    int n1, n2, sum;
    printf("n1:\n");
    scanf("%d", &n1);
    printf("n2:\n");
    scanf("%d", &n2);
    sum = inbetween_sum(n1, n2);
    printf("%d", sum);
    return 0;
}

int inbetween_sum (int N1, int N2) {
    int sum1 = 0;
    if (N1 == N2) {
       return sum1;
   }
   sum1 += inbetween_sum (N1+1, N2);
   return sum1;
}

2 个答案:

答案 0 :(得分:3)

sum1 += inbetween_sum (N1+1, N2);有问题。您返回或添加的所有内容均为0,而不是实际数字。

将您的功能重写为:

int inbetween_sum (int N1, int N2) {
   int sum1 = 0;
   if (N1 >= N2 - 1) {
       return sum1;
   }
   sum1 += N1 + 1 + inbetween_sum (N1+1, N2);
   return sum1;
}

Live example here

答案 1 :(得分:3)

您正在添加零。您必须在总和中添加N1 + 1并更改停止条件

int inbetween_sum (int N1, int N2) {
   int sum1 = 0;
   if (N1 + 1 >= N2) {
      return sum1;
   }
   sum1 += N1 + 1 + inbetween_sum (N1+1, N2);
   return sum1;
}

同样将sum1初始化为0然后使用+ =并不清楚。您的代码可以重构为:

int inbetween_sum (int N1, int N2) {
   if (N1 + 1 >= N2) {
      return 0;
   }
   return N1 + 1 + inbetween_sum (N1+1, N2);
}