「列印 N 項的 Fibonacci 數列」意思是要產生帶索引的清單 F(0)、F(1)、F(2)、……、F(N−1),其中在兩個種子值之後的每一項,都等於前兩項之和,符合遞迴式 F(n) = F(n−1) + F(n−2)。Fibonacci 數列產生器會將該清單以顯示文字的形式完整輸出:每一行一個索引,每一個十進位數字都完整保留,由最上方的 F(0) 依序排列到最下方的 F(N−1)。由於產生過程使用一組以 current = 0、next = 1 開始的迭代 BigInt 配對,非常大的項也不會被壓縮成科學記號,而剪貼簿輸出的內容與畫面上所見的結果逐位元相同。讀者只需輸入一個數字——也就是想要幾行——就能得到一份自我描述、可直接複製貼上的數列,且索引都已經標示在位。輸出中的每一行格式皆為 F(索引) = 值,這代表即便是早期重複出現的 1,也能清楚標示。本文將逐步說明如何呼叫這個工具、如何解讀回傳結果,以及當列印出的清單顯示在螢幕上之後,可以怎麼運用它。

print fibonacci sequence up to n terms
以精確十進位列印 N 項 Fibonacci 數列

「N 項」與「直到索引 N」的差別

「列印 N 項的 Fibonacci 數列」這句話其實藏著一個小問題。在某些參考資料中,「項」指的是到達的位置,因此「到第 10 項為止」等於 F(10)。在其他參考資料(包括本工具)中,「項」則代表回傳的列數,所以「最多 10 項」等於 F(0) 到 F(9)。本 Fibonacci 數列產生器一律採用列數的解讀方式:輸入的是你希望在螢幕上看見的行數,而不是要在哪一個 Fibonacci 索引停下來。要求 1 項時,只會回傳 F(0);要求 20 項時,則會回傳 F(0) 到 F(19)。結果上方的摘要一定會同時列出這兩個數量——已產生的項數與最終索引——因此不可能在不知情的狀況下發生 off-by-one 錯誤。若你需要的是在支援範圍上限、以數量為基礎的輸出,取得 1 到 1,000 項 Fibonacci 數列這篇專文會以更長的範例,示範同樣的輸入模型。

如何列印 N 項的 Fibonacci 數列

  1. 開啟 Fibonacci 數列產生器,在輸入欄位中輸入 1 到 1,000 之間的整數項數。其他輸入——小數、正負號、科學記號、逗號、空值,或是超過一千的數字——會被拒絕,而不是被悄悄轉換。
  2. 產生數列並閱讀摘要列。該摘要一定會同時顯示已產生的項數與最終索引,因此你要求的數量就是實際得到的數量。
  3. 抽樣檢查一個具代表性的項目。早期數值——F(0) = 0、F(1) = 1、F(2) = 1、F(3) = 2——很容易用 OEIS A000045 或 NIST 數學函式數位圖書館中關於 Fibonacci 數的條目來驗證。
  4. 使用複製按鈕複製這份以換行分隔的精確清單,或在你的瀏覽器封鎖剪貼簿存取時,以拖曳方式選取可見文字。複製動作所寫入的內容與螢幕上所顯示的列完全相同;它不會插入分隔符號、不會改用科學記號,也不會省略早期重複的 1。

每一行都附帶索引

每一列印出來的列,格式皆為 F(索引) = 十進位值,沒有任何分隔符號,也沒有指數進位表示法。在每一行都附上索引,有其特別的重要性:因為這個數列在早期含有重複的值。F(1) 和 F(2) 都是 1,若一個較長的數列沒有標示位置,讀者往往無法分辨哪一列是哪一列。下方的參考表列出前幾項帶索引的值、產生每一項的遞迴步驟,以及對應的十進位結果——資料來源為 NIST DLMF §24.15(iv) 與 OEIS A000045。

列遞迴步驟值
F(0)種子0
F(1)種子1
F(2)F(1) + F(0) = 1 + 01
F(3)F(2) + F(1) = 1 + 12
F(4)F(3) + F(2) = 2 + 13
F(5)F(4) + F(3) = 3 + 25
F(6)F(5) + F(4) = 5 + 38
F(7)F(6) + F(5) = 8 + 513
F(8)F(7) + F(6) = 13 + 821
F(9)F(8) + F(7) = 21 + 1334
F(10)F(9) + F(8) = 34 + 2155

將遞迴步驟與值並列展示,才能讓這份列印清單不只是答案,而成為教學素材。讀者可以在任何一行停下,驗證畫面上的數字實際上等於其上方兩列之和。同一個算式同時也是一個簡明的小範例:F(8) = F(7) + F(6) = 13 + 8 = 21,每一項都是一次精確的加法,完全不需要擔心四捨五入。

跨越安全整數邊界後仍保持精確十進位

標準的 JavaScript Number 僅能精確表示到 2^53 − 1,大約是 9.007 × 10^15。Fibonacci 數列很快就會跨越這個門檻:到了 F(79),其值已超過安全整數上限,從該索引之後,一般的浮點數運算會回傳錯誤的數字。涉及黃金比例(φ 與 ψ)冪次的封閉形式會進一步放大四捨五入誤差,因此即便是經過仔細設計的封閉形式實作,在 n 稍大時也可能印出錯誤的數字。

本 Fibonacci 數列產生器避開了這兩個問題。它將 current 與 next 保持為 BigInt,每一項只以一次精確的整數加法推進,並將每個值直接轉成純十進位文字。例如 F(100) 會被列印為 354224848179261915075——全部二十一碼都完整保留,不是科學記號,也沒有四捨五入。在支援範圍的上限同樣成立:F(999) 含有數百個十進位數字,顯示的清單會保留每一個數字。若需要針對外部策展來源進行抽樣驗證,OEIS A000045 的 b-file 維護著一份已驗證、涵蓋到大型索引的完整 Fibonacci 數列。

列印出來的 Fibonacci 清單何時真正派上用場

精確且帶索引的輸出,是一種低調的實用工具。在需要讓同一個值以相同形式多次出現的場合,它最能發揮作用。

  • 測試資料:將前十二項貼進單元測試中,作為自訂遞迴實作預期輸出。
  • 遞迴展示:將列印出來的清單與程式碼並排,方便學生在紙上對應每個步驟與螢幕上的每一行。
  • 交叉驗證 BigInt 工作:將其精確十進位與語言實作比對,確認任意精度函式庫在超過 Number 安全範圍後仍正確無誤。
  • 速查表與筆記:在數學或程式設計資料夾頂端保存一份小型帶索引清單,以便快速查閱。

上述情境有兩個共通點:比起手動重新推導,附帶索引、可直接使用的十進位參考更可靠;任何四捨五入或科學記號都會導致下游比較失敗。

限制與本工具不做的事

一千項的上限是產品上的界線,並非數列本身的數學極限。本工具的目的在於讓渲染後的清單、複製的內容以及 DOM 的大小都有所節制,使頁面保持流暢。光是 F(999) 就含有數百個十進位數字,而一百萬項的數列屬於儲存問題,而非產生問題——在這種規模下,應該使用具備大量數值格式的專屬程式設計環境。本工具也不會:

  • 測試某個獨立數字是否屬於此數列。
  • 分解 Fibonacci 數。
  • 辨識哪些索引會產生質數。
  • 繪製黃金螺旋或計算相鄰項的比值。
  • 儲存過去的執行紀錄或建立帳號資料。

所有的驗證、加法、格式化與複製動作,都在目前的瀏覽器中完成。Fibonacci 數列產生器不會呼叫任何數列 API、不會載入遠端的數值表,也永遠不會接收項數或所產生的數列。編輯項數會清除先前的結果,因此舊的數列不會出現在尚未處理的新輸入下方。

以可信參考來源驗證列印結果

輸出內容完全公開,因此驗證多半只是比對兩個地方同一列的結果。OEIS A000045 條目列出最前面的標準項,並提供一份延伸到大型索引、經過驗證的 b-file。NIST DLMF 中關於 Fibonacci 數的章節,則記錄了相同的定義、相同的種子值,以及與本產生器相同的零起始索引慣例。若工具在某個索引所列印的值與任一參考來源相符,則其餘清單即屬正確,因為後續每一列都是前兩列在 BigInt 算術下的精確總和。

若你正在權衡各種選項,產生器是否會將大型 Fibonacci 值四捨五入?對此有詳細說明。