Fibonacci 費氏數列

更新於 發佈於 閱讀時間約 4 分鐘

在本篇文章中,我們將探討如何透過遞迴(Recursion)來實作 Fibonacci 數列。

Fibonacci 數列簡介

Fibonacci 數列是一個相當著名的數學序列,其定義如下:

  • F(0) = 0
  • F(1) = 1
  • 當 n ≥ 2 時,F(n) = F(n-1) + F(n-2)

也就是說,Fibonacci 數列的每一項值(從第三項開始)都是前兩項的總和。Fibonacci 數列的前幾項為:

n    :  0   1   2   3   4   5   6   7   8   9  ...
F(n) : 0 1 1 2 3 5 8 13 21 34 ...

程式碼

以下為完整的 C 程式碼範例:

// 遞迴產生 Fibonacci 數列的函式
#include <stdio.h>

// 宣告 fibonacci 函式原型,返回型別為 unsigned long long int
unsigned long long int fibonacci(unsigned int n);

// main 函式,開始程式執行
int main(void)
{
unsigned long long int result; // 用來儲存 Fibonacci 值
unsigned int number; // 用戶輸入的數字

// 提示用戶輸入整數
printf("%s", "Enter an integer: ");
scanf("%u", &number);

// 計算用戶輸入數字對應的 Fibonacci 值
result = fibonacci(number);

// 顯示結果
printf("Fibonacci(%u) = %llu\n", number, result);
} // end main

// Fibonacci 函式的遞迴定義
unsigned long long int fibonacci(unsigned int n)
{
// 基本情況:當 n 等於 0 或 1 時,直接回傳 n
if (0 == n || 1 == n)
{
return n;
}
// 遞迴情況:計算前兩項的和
else
{
return fibonacci(n - 1) + fibonacci(n - 2);
}
} // end function fibonacci
  • n 為 0 或 1 時,直接回傳 n
  • 這就是遞迴的終止條件:不需要再進行任何遞迴呼叫。

  • n > 1 時,將回傳 fibonacci(n-1)fibonacci(n-2) 的和。
  • 遞迴的運作方式:
    • 為了計算 fibonacci(n),必須先計算 fibonacci(n-1)fibonacci(n-2)
    • 計算 fibonacci(n-1) 時,又會進一步呼叫 fibonacci(n-2)fibonacci(n-3),如此層層展開。
    • 最終都會回到基礎情況 n == 0n == 1,才依序回傳並累加。

以輸入 n = 5 為例,fibonacci(5) 會依照下列遞迴程序執行:

  1. fibonacci(5)
    • → 需要 fibonacci(4) + fibonacci(3)
  2. fibonacci(4)
    • → 需要 fibonacci(3) + fibonacci(2)
  3. fibonacci(3)(在 fibonacci(4) 內部呼叫)
    • → 需要 fibonacci(2) + fibonacci(1)
  4. fibonacci(2)(在 fibonacci(3) 內部呼叫)
    • → 需要 fibonacci(1) + fibonacci(0)
    • fibonacci(1) 回傳 1
    • fibonacci(0) 回傳 0
    • 因此 fibonacci(2) 回傳 1 + 0 = 1
  5. 回到 fibonacci(3)
    • 另一個呼叫為 fibonacci(1),直接回傳 1
    • 因此 fibonacci(3) 回傳 1 + 1 = 2
  6. 回到 fibonacci(4)
    • 已經知道 fibonacci(3) = 2
    • 另一個呼叫 fibonacci(2) 在之前已算出來是 1
    • 因此 fibonacci(4) 回傳 2 + 1 = 3
  7. 回到最外層 fibonacci(5)
    • 已經知道 fibonacci(4) = 3
    • 需要再計算 fibonacci(3) = 2 (一樣進行遞迴)
    • 最後 fibonacci(5) = 3 + 2 = 5

經過以上遞迴展開,我們得到 Fibonacci(5) = 5

留言
avatar-img
留言分享你的想法!
avatar-img
電資鼠 - 您的學習好夥伴
11會員
215內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News