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
電資鼠 - 您的學習好夥伴
20會員
242內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 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
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
高中數學主題練習—二階行列式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News