C程式查詢給定遞推關係的第n項


假設我們有三個數字a、b、c和一個值n。我們遵循一個遞推公式S(n) -

  • S(1) 返回 a
  • S(2) 返回 b
  • S(3) 返回 c
  • S(n) 返回 S(n-1) + S(n-2) + S(n-3),對於所有 n > 3。

我們將不得不透過遵循此遞推關係來查詢第n項。

因此,如果輸入類似於 a = 5,b = 2,c = 3,n = 6,則輸出將為 28,因為 -

  • S(6) = S(5) + S(4) + S(3)
  • S(5) = S(4) + S(3) + S(2)
  • S(4) = S(3) + S(2) + S(1) = 3 + 2 + 5 = 10
  • 所以現在 S(5) = 10 + 3 + 2 = 15
  • 並且 S(6) = 15 + 10 + 3 = 28

為了解決這個問題,我們將遵循以下步驟 -

定義一個函式 solve(),它將接收 a、b、c、n,

  • 如果 n 等於 1,則
    • 返回 a
  • 如果 n 等於 2,則
    • 返回 b
  • 如果 n 等於 3,則
    • 返回 c
  • 返回 solve((a, b, c, n - 1) + solve(a, b, c, n - 2) + solve(a, b, c, n - 3))

示例

讓我們看看以下實現以獲得更好的理解 -

#include <stdio.h>
int solve(int a, int b, int c, int n){
    if(n == 1)
        return a;
    if(n == 2)
        return b;
    if(n == 3)
        return c;
    return solve(a, b, c, n-1) + solve(a, b, c, n-2) + solve(a, b, c, n-3);
}
int main(){
    int a = 5, b = 2, c = 3, n = 6;
    int res = solve(a, b, c, n);
    printf("%d", res);
}

輸入

5, 2, 3, 6

輸出

28

更新於: 2021年10月8日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.