費氏數列是從零開始的整數序列 F(0)=0、F(1)=1、F(n)=F(n−1)+F(n−2),會產生 0、1、1、2、3、5、8、13、21、34、55 等等。若想直接取得精確的索引清單而不用手動相加,費氏數列產生器接受 1 到 1,000 之間的整數個數,並在瀏覽器中渲染從 F(0) 開始到最終索引的每一項,使用 BigInt 運算,讓遠超過 JavaScript 安全整數界限的值也能保留每一個小數位數。產生過程採迭代方式且完全在本機執行:輸入像 20 這樣的個數會依序產生 F(0) 到 F(19),每一行都標上索引,避免前面重複出現的 1 彼此混淆。結果是純文字,沒有科學記號或千分位分隔符,可以直接複製到筆記、程式註解或測試固定資料中。任何輸入或輸出都不會離開裝置,這讓課堂作業與大批測試資料都能保持隱私。產生器的上限是效能上的限制,而非數學上的極限,它涵蓋了人們真正會用到的日常範圍。

how to get fibonacci sequence
如何取得 1 到 1,000 項的費氏數列

費氏數列一覽

這個序列由兩個種子和一條規則定義。F(0) 等於 0,F(1) 等於 1,之後每一項都是前兩項的和。這是OEIS A000045與NIST 數學函數數位圖書館 §24.15(iv)所記載的標準從零開始形式。從零開始而非從一開始,在公式或程式碼中出現索引時會影響結果,因為只要起點偏移一個位置,任何直接使用 n 的參照都會出錯。

許多通俗來源從 1、1、2、3、5、8 開始,並悄悄略過 F(0)。產生器拒絕沿用這種慣例,因為拿掉種子 0 會讓遞迴關係在最前面變得模糊不清。每一行都附有索引,所以即使在相鄰兩列看到兩個 1,讀者仍能分辨各自的位置。這也符合模算術、遞迴證明與任意精度函式庫測試中該序列呈現的方式。

本機產生器如何保持數值精確

JavaScript 內建的 Number 型別,依 ECMAScript 規範的定義,最多只能精確表示到 2^53 − 1,約 9.007 × 10^15。F(79) 就已經超過這個界限,之後的每一項若當作一般的 Number 處理都會遺失位數。使用閉合形式 Binet 公式的直接實作表現更差,因為浮點數的乘冪與平方根早在到達安全整數上限之前就已將大數值四捨五入。費氏數列產生器避開了這兩個陷阱,它將每個值儲存為 BigInt,每一項只進行恰好一次的整數加法,再直接把 BigInt 轉成十進位文字。例如 F(100) 會顯示為 354224848179261915075,而非科學記號,也不是近似值。

所有過程都在本機進行:你輸入的個數與工具產生的序列絕不會離開瀏覽器。沒有上傳、沒有遠端序列 API、也沒有儲存的歷史紀錄。修改個數會清除先前的結果,所以舊的序列不會留在一個尚未處理的新輸入之下。這讓這個工具在隱私或確定性很重要的測試固定資料、展示與課堂作業中都很實用。

一千項的上限是產品效能上的邊界,並非序列在數學上的極限。F(999) 包含數百個十進位數字,整份索引清單大到需要捲動檢視。設定固定上限能避免意外產生龐大的 DOM 與剪貼簿內容。若需要數百萬項或專門的數論工作,正確的工具是具備 BigInteger 函式庫並設計來處理大量資料的程式設計環境。

三個步驟取得序列

  1. 開啟費氏數列產生器,輸入 1 到 1,000 之間的整數項數。個數就是你想要的列數,且永遠會包含 F(0)。
  2. 產生序列並閱讀摘要行。它會說明最終索引,並顯示具代表性的索引值,讓你在複製前能驗證結果。
  3. 複製以換行分隔的精確清單。若剪貼簿權限被拒絕,請手動選取可見的文字;呈現的文字與複製動作會寫入的內容完全相同。

一個常見的混淆是把輸入當成目標值或最終索引。輸入 10 代表要從 F(0) 到 F(9) 共十列,而不是要 F(10)。每次摘要都會明確顯示這點,想深入了解個數與索引規則的讀者可以閱讀從項數產生費氏數列。

輸出內容的樣貌

每一列顯示索引、等號以及精確的十進位數值。前十列是廣為人知的參考值,與已公布的序列一致,在處理更大索引之前是很實用的健全性檢查。

索引數值
F(0)0
F(1)1
F(2)1
F(3)2
F(4)3
F(5)5
F(6)8
F(7)13
F(8)21
F(9)34

這些值與已公布的 A000045 條目逐項相符。隨著索引增加,產生器維持相同的格式:索引、等號、精確的十進位整數。F(78) 與 F(79) 附近是確認沒有偷偷四捨五入的好地方,因為 F(79) 是第一個超過 Number.MAX_SAFE_INTEGER 的項。

三個值得注意的失敗模式

浮點數四捨五入會出現在兩個地方。第一個是涉及黃金比例乘冪的閉合形式:使用該公式的計算機在印出 F(100) 時,很可能回傳與精確答案相差幾個單位的值。第二個是一般的 Number 變數被要求容納超過 2^53 − 1 的值時的隱性溢位;結果乍看之下合理,但已經不再精確。使用精確整數算術的遞迴能同時避開這兩種失敗模式,這也是產生器對每一項只做一次加法而不做其他運算的原因。

第二個陷阱是隱性輸入寬鬆化。要求「1.5」項、「10.0」項、「1e2」項或「−5」項沒有意義,若悄悄四捨五入到附近的整數會讓使用者感到意外。產生器會拒絕所有這類格式,以及非數字字元、千分位分隔符、空輸入和任何超過 1,000 的個數。這讓摘要所顯示的最終索引保持誠實。

第三個陷阱是把產生器當成比它更多功能的工具。它不會測試另一個數字是否屬於這個序列、不會分解質因數、不會找出費氏質數項、不會計算比例、不會繪製螺旋,也不會聲稱某個數值模式證明了自然或財務上的關係。它只產生上面定義的精確序列,依序列出十進位數字。

精確索引清單的用處

索引清單是檢查會走訪費氏項的程式範例最乾淨的方式。把這些列放進單元測試,斷言第二十項等於 F(19),這個遞迴實作就有了內建的參考值。一份二十列的短清單也能整齊地放在筆記檔案頂端或題目敘述中當作範例。

除了測試之外,精確清單對展示遞迴本身、比較任意精度函式庫,以及填入試算表或腳本中的小型固定資料都很有用。這個序列既不長又定義明確,不需要躲在 API 呼叫後面,而本機產生器讓作業流程既快速又可離線使用。

對大多數讀者來說,正確的做法是把個數設成符合任務的數字,複製產生的文字,然後停手。產生器的存在是為了省去算術與格式決策,讓其餘的工作能專注在使用這個序列要解決的真正問題上。

想深入了解,請參閱在 Python 中取得超過 F(78) 的費氏數列。