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
電資鼠 - 您的學習好夥伴
9會員
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
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—指數律基本練習
Thumbnail
高中數學主題練習—指數律基本練習
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News