[英]C Program to calculate sum of numbers X to Y using recursion
我下面的代碼工作正常。
#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)
關於如何解決這個問題的任何想法? 到目前為止失敗。
int calculateSum(int fromNum, int toNum) {
int res;
if (fromNum == toNum) {
return (fromNum);
}
else {
res = fromNum + calculateSum((fromNum + 1), toNum);
}
return (res);
}
目前,您正在將1
硬編碼為遞歸的終點。
您需要的是為此使用不同的值,下面的偽代碼顯示了如何執行此操作:
def calculateSum(number, limit):
if number <= limit:
return limit
return number + calculateSum(number - 1, limit)
為了提高效率,如果您違反規則並提供比起始數字更高的限制,則只需取回該數字即可。 您可以捕獲並返回零,但是如果您有興趣,我將其保留為練習。
使用您自己的calculateSum
作為基准,將其轉換為實際代碼應該相對容易。
我應該提到,這是遞歸的一個非常糟糕的用例。 通常,當解決方案搜索空間快速減少時(例如,將每個遞歸級別的二進制搜索減半),應使用遞歸。 除非您的環境沒有進行尾部調用優化,否則您可能很快就會耗盡堆棧空間。
相反,當你達到停止1
,停止當你到達from
。
int calculateSum(from, to) {
if (to == from) {
return from;
} else {
return to + calculateSum(from, to-1);
}
}
從1更改為:
int calculateSum(int from,int to) {
int res;
if (to== from) {
return (from);
}
else {
res = to+ calculateSum(from,to - 1);
}
return (res);
}
您可以使用三元運算符。
int calculateSum(int from, int to) {
return from == to ? from : from + calculateSum(from + 1, to);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.