我有以下代码可以正常工作。
#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)
有关如何解决此问题的任何想法?到目前为止失败了。
答案 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);
}