簡體   English   中英

C程序使用遞歸計算X到Y的總數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM