嘿我试图通过一些递归来刷新我的想法。 我想添加从“开始”到“结束”的所有数字。
即如果开始为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故障)。我做错了什么?
编辑:对不起,我在实际代码中使用了相同的变量,当我写这篇文章时,我最终将它作为开始/结束而忘记更改所有代码。答案 0 :(得分:7)
您的函数中有哪些from
和to
个变量?也许你使用一些全局变量而不是使用start
和end
,这就是你遇到问题的原因?另外,为什么在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);
}