C程序使用递归计算数字X到Y的总和

时间:2017-03-03 03:08:19

标签: c

我有以下代码可以正常工作。

#include<stdio.h>

int calculateSum(int);

int main() {
    int num;
    int result;

    printf("Input number = ");
    scanf("%d", &num);

    result = calculateSum(num);
    printf("\nResult from 1 to %d = %d", num, result);

    return (0);
}

int calculateSum(int num) {
    int res;
    if (num == 1) {
        return (1);
    }
    else {
        res = num + calculateSum(num - 1);
    }
    return (res);
}

输入数字= 5
结果从1到5 = 15

现在我正在尝试为程序提供2个输入,从数字到数字。

示例:第一个输入= 5,第二个= 8,结果应为= 26(5 + 6 + 7 + 8)

有关如何解决此问题的任何想法?到目前为止失败了。

5 个答案:

答案 0 :(得分:3)

int calculateSum(int fromNum, int toNum) {
    int res;
    if (fromNum == toNum) {
        return (fromNum);
    }
    else {
        res = fromNum + calculateSum((fromNum + 1), toNum);
    }
    return (res);
}

答案 1 :(得分:1)

目前,您正在将1硬编码为递归的终止点。

您需要的是能够使用不同的值,以下伪代码显示了如何执行此操作:

def calculateSum(number, limit):
    if number <= limit:
        return limit
    return number + calculateSum(number - 1, limit)

为提高效率,如果您违反规则并提供高于起始编号的限制,您只需取回该编号即可。你可以抓住并返回零,但如果你对此感兴趣,我会将其留作练习。

使用您自己的calculateSum作为基线,您可以相对轻松地将其转换为实际代码。

我应该提一下,这是递归的一个非常糟糕的用例。通常,当解决方案搜索空间快速减少时,应使用递归(例如二进制搜索将每个递归级别减半)。除非您的环境进行尾调用优化,否则您很可能会很快耗尽堆栈空间。

答案 2 :(得分:0)

而不是在到达1时停止,而是在到达from时停止。

int calculateSum(from, to) {
    if (to == from) {
        return from;
    } else {
        return to + calculateSum(from, to-1);
    }
}

答案 3 :(得分:0)

将1更改为:

int calculateSum(int from,int to) {
    int res;
    if (to== from) {
        return (from);
    }
    else {
        res = to+ calculateSum(from,to - 1);
    }
    return (res);
}

答案 4 :(得分:-1)

您可以使用三元运算符。

int calculateSum(int from, int to) {
    return from == to ? from : from + calculateSum(from + 1, to);
}