递归地添加数字序列

时间:2011-05-09 04:05:55

标签: c algorithm recursion sequence add

嘿我试图通过一些递归来刷新我的想法。 我想添加从“开始”到“结束”的所有数字。

即如果开始为1,结束为5.那么答案将是1 + 2 + 3 + 4 + 5 = 15

到目前为止,我已经有了这个

int calc(int start, int end){
    if(start > end)
        return total;
    else{
        total = total + start;  
    return sum1(start++, end);
    }
} 

它没有工作(我得到seg故障)。我做错了什么?

编辑:对不起,我在实际代码中使用了相同的变量,当我写这篇文章时,我最终将它作为开始/结束而忘记更改所有代码。

4 个答案:

答案 0 :(得分:7)

您的函数中有哪些fromto个变量?也许你使用一些全局变量而不是使用startend,这就是你遇到问题的原因?另外,为什么在sum1函数中使用calc而不是calc

请改为尝试:

int calc(int start, int end){
    if(start > end)
        return 0;
    else
        return start + calc(start + 1, end);
} 

答案 1 :(得分:3)

首先,您没有使用功能参数(开始,结束),而是使用(从,到)。我假设from和to是全局变量,或者你的代码不能编译。此外,总声称在哪里?

这应该更好:

int calc(int start, int end){
    if(start > end)
        return 0;
    else{
        return start + calc(start+1, end);
    }
} 

答案 2 :(得分:3)

顺便说一下,这是一个更有效的解决方案:

int calc(int from, int to)
{
    if (from == 0)
        return to * (to+1) / 2;
    else
        return calc(0, to) - calc(0, from);
}

它甚至是递归的!好吧,直到你进一步简化为

int calc(int from, int to)
{
    return ( to * (to+1) - from * (from+1) ) / 2;
}

那是因为f(n)= n + ... + 3 + 2 + 1 = n(n + 1)/ 2

答案 3 :(得分:0)

这适用于。

int calc(int from, int to)
{
    if (from >= to) return to;
    return from + calc(from + 1, to); 
}