计算工具 · 数学计算

斐波那契数列

任意项/大数/黄金比

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 50 次使用
支持 负数项:F(−n)=(−1)ⁿ⁺¹F(n);|n| 上限 50000,全程 BigInt 精确。
广义起始项 a₁ · a₂ → 卢卡斯型 / 任意二阶
前 N 项列表F(1)…F(n) 显示 30 项 · 长数自动缩写
30
黄金螺旋 + 黄金矩形1, 1, 2, 3, 5, 8, 13, 21 … 正方形拼贴
方格描边生长 · 四分之一圆弧拼成黄金螺旋 8
边长为相邻斐波那契数的正方形螺旋排列,每格内接一段四分之一圆弧,首尾相连即为黄金螺旋(Golden Spiral); 整体外框逼近黄金矩形(长宽比 → φ ≈ 1.618)。这是自然界鹦鹉螺、向日葵、星系旋臂的视觉本源。
黄金分割收敛F(n+1) / F(n) → φ

理论值 φ = (1+√5)/2 = 1.6180339887498948…。相邻项比值随 n 单调收敛于 φ; 通项 Binet 公式:F(n) = (φⁿ − ψⁿ) / √5,其中 ψ = (1−√5)/2。下表为各 n 的相邻比与误差 |比值 − φ|:

nF(n)F(n+1)F(n+1)/F(n)误差 |Δφ|
三种算法实测对比递归 O(φⁿ) · 迭代 O(n) · 快速倍增 O(log n)

以当前 |n| 为输入分别计算 F(n) 并实测耗时。递归法对 n > 35 自动跳过(指数级会卡浏览器); 快速倍增法与矩阵快速幂同为 O(log n),BigInt 下可瞬算 F(50000)。三法结果一致即为互验。

算法时间复杂度空间耗时结果一致
核心恒等式BigInt 数值验算 · 全部命中
是否斐波那契数判定任意数 · 定位第几项
斐波那契回撤位23.6% / 38.2% / 50% / 61.8% / 78.6%
说明:23.6% / 38.2% / 61.8% / 78.6% 由黄金比派生(1−φ⁻¹、φ⁻²、φ⁻¹、√φ⁻¹);50% 非严格斐波那契位,但因心理强支撑被广泛采用。仅作教学演示,不构成投资建议。
应用领域自然 · 算法 · 艺术 · 金融
植物花序 phyllotaxis
向日葵花盘、松果鳞片、菠萝凸块的螺旋数几乎都是相邻斐波那契数(34/55、21/34)——这是叶序最大化采光的最优排列。
兔子繁殖 1202
斐波那契《算盘书》原始问题:一对兔子每月生一对幼兔,幼兔下月成年再生,第 n 月总对数即 F(n)
动态规划 DP
爬楼梯、青蛙跳台阶、解码方法的状态转移 dp[i]=dp[i−1]+dp[i−2] 与斐波那契递推完全一致
算法效率 complexity
朴素递归求 F(n) 的调用次数本身就是斐波那契数,复杂度 O(φⁿ)——教科书"为何要记忆化"最经典的反例。
斐波那契堆 heap
Fibonacci Heap 把 Dijkstra 从 O((V+E)logV) 优化到 O(E+VlogV),得名于级联剪切产生的斐波那契式增长。
艺术构图 golden
帕台农神庙、达芬奇构图稿、苹果 LOGO 草图都暗含黄金矩形;摄影"螺旋构图"即把视觉中心放在螺旋内核。
金融市场 trading
技术分析的斐波那契回撤 / 扩展 / 时间窗皆由斐波那契数与黄金比延伸而来,是趋势交易最常用辅助指标。
天体物理 galaxy
部分螺旋星系(NGC 1232、M51)旋臂展开角接近黄金螺旋,源于气体云在旋转引力场中的对数螺旋演化。
公式速查递推 · 通项 · 求和 · 恒等式

递推F(1)=F(2)=1,F(n)=F(n−1)+F(n−2)(n≥3)

通项 BinetF(n)=(φⁿ−ψⁿ)/√5,φ=(1+√5)/2,ψ=(1−√5)/2

求和F(1)+F(2)+…+F(n)=F(n+2)−1

奇数项和F(1)+F(3)+…+F(2n−1)=F(2n)

偶数项和F(2)+F(4)+…+F(2n)=F(2n+1)−1

平方和F(1)²+F(2)²+…+F(n)²=F(n)·F(n+1)

卡西尼F(n−1)·F(n+1)−F(n)²=(−1)ⁿ

d'OcagneF(m)·F(n+1)+F(m−1)·F(n)=F(m+n)

快速倍增F(2k)=F(k)·(2F(k+1)−F(k)),F(2k+1)=F(k+1)²+F(k)²

负数项F(−n)=(−1)ⁿ⁺¹·F(n)

黄金比limₙ→∞ F(n+1)/F(n)=φ=1.6180339887498948…

矩阵[[1,1],[1,0]]ⁿ = [[F(n+1),F(n)],[F(n),F(n−1)]]

就绪 · 任意项快速倍增 O(log n) · 全程 BigInt 精确大数,F(100)=21 位精确
第一节

关于本工具

About

手算斐波那契数列第 100 项已经繁琐,若要算第 1000 项或更大数,普通计算器直接溢出。这个工具输入序号即输出对应项,支持大数精确计算,不丢失任意一位数字;同时显示相邻项的黄金比近似值,直观验证极限收敛。所有运算在浏览器本地执行,输入数据不上传服务器。

使用场景

程序性能调优

后端开发者在排查一个递归函数的内存溢出时,发现输入 n=40 时耗时已超 2 秒。他需要确认不同算法(递归、迭代、矩阵快速幂)在 n=50 时的具体耗时差异,而非理论复杂度。本工具支持计算任意项(n=1000 以内即时出结果),且不依赖本地编译环境,能快速给出精确数值,帮助判断是否值得引入矩阵幂优化。

大数精度验证

金融风控工程师在核对一笔涉及 64 位整型溢出的交易流水号时,怀疑其生成算法与斐波那契数列有关。他需要计算第 92 项(超过 2^63-1)的精确值,而非近似浮点数。本工具支持大数运算,直接输出第 100 项的 21 位十进制整数,无需自行实现高精度加法,避免了在 Python 中因 int 类型隐式转换导致的精度丢失。

黄金比例验证

工业设计师在调整一款手机壳的圆弧曲率时,希望相邻两段弧的半径比接近 1.618。他需要快速验证:当一段弧半径为 50mm 时,相邻段半径应取 80.9mm 还是 81mm。本工具不仅能计算斐波那契数列,还直接输出相邻项的比值(黄金比例近似值),支持小数点后 15 位精度,比手动计算更可靠。

数列规律教学

高中数学老师在备课时,需要为一道数列填空题准备多个变式:已知 F(5)=5, F(6)=8,求 F(20) 的值。她需快速验证不同初始条件(如 F(1)=1, F(2)=1 与 F(1)=2, F(2)=3)下第 20 项的差异。本工具支持自定义起始项和项数,秒级输出完整序列,比手算节省 15 分钟,且能生成多组对照数据用于课堂板书。

分形图形生成

独立游戏开发者在编写程序化生成树木的算法时,需要斐波那契数列来定义树枝的分叉角度和长度衰减比例。他需要第 3 到第 10 项的精确值作为参数输入 shader,且要求数值为整数(非浮点)。本工具支持指定范围输出(如第 3-10 项:2,3,5,8,13,21,34,55),可直接复制粘贴到代码中,省去手动循环计算的步骤。

对比矩阵

维度本工具竞品 A(在线计算器站)传统方法(手工 / 编程)
大数支持支持任意大数(千位级),无精度损失多数限 16 位以内,溢出后显示科学计数法纸笔或 Excel 受位数限制,需高精度库
离线可用纯浏览器计算,断网可用需联网加载页面完全离线但需编程环境或计算器
黄金比输出自动计算相邻项比值并显示黄金比精度通常只输出数列值,不提供比值需手动逐项除,耗时且易错
速度即时计算,无网络延迟受服务器响应影响,高峰期慢手工逐项算极慢;编程需编译环境
隐私输入数据不出浏览器输入值发送至服务器完全本地,无传输
使用门槛打开即用,零配置需注册或验证码的站点有门槛需懂编程语言或数学公式
第二节

使用指南

Getting Started

使用步骤

  1. 1在「项数 n」输入框键入序号(如 100),下方立即显示第 100 项数值,无需点击计算按钮
  2. 2勾选「大数模式」后输入超长项数(如 1000),结果自动切换为科学计数法,避免溢出显示
  3. 3点按「黄金比」标签页,页面直接展示当前相邻两项比值与 φ 的偏差值,精度到小数点后 15 位
  4. 4在结果区选中任意项数值,按 Ctrl+C 复制,粘贴到其他文档时保留完整数字精度

输入输出示例

输入输出说明
n=1055常规:第10项是常用验证值,55是斐波那契数列中第一个两位数,适合快速确认工具基本计算正确。
n=11边界:第1项定义为1,很多用户误以为从0开始,此示例暴露工具是否遵循标准定义(F(1)=1)。
n=00边界:第0项定义为0,部分工具不支持n=0或返回空,此示例验证工具对数列起始点的处理。
n=100354224848179261915075常规:大数验证,第100项已远超普通整数范围,测试工具是否支持大数计算(BigInt或高精度)。
n=100043466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875边界:超大数(第1000项有209位),验证工具能否处理长整数溢出或精度丢失问题。
n=-55(若支持负索引)或 报错提示易错:负索引在数学中无标准定义,部分工具返回正负交替序列(F(-n)=(-1)^(n+1)*F(n)),此示例暴露工具对负数的处理策略。
n=1.5报错提示:n必须为整数易错:小数输入,用户可能误输入浮点数,验证工具是否做类型校验并给出明确错误提示。
n=1476超过工具支持的最大项数(如1476超出JavaScript Number安全整数范围),返回提示或截断结果边界:接近或超过工具实现的最大项(如纯JS实现受Number.MAX_SAFE_INTEGER限制),验证工具是否给出明确上限提示。

常见错误对照

1.请求第 0 项或第 1 项混淆

✗ 错误输入 n=0 想得到第一个数 1
✓ 修复输入 n=1 得到 F(1)=1

斐波那契数列通常定义 F(1)=1、F(2)=1,第 0 项 F(0)=0。若工具从 n=0 开始,用户需确认索引起点,否则结果偏移一位。

2.大数输入超出 JavaScript 安全整数范围

✗ 错误输入 n=1000 期望精确值,但结果末尾几位错误
✓ 修复输入 n=1000,工具若支持大数会返回精确值(如 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875)

纯浏览器实现用 JavaScript Number 时,n>78 会丢失精度(超过 2^53)。本工具若用 WASM 或后端大数库,可精确计算任意大 n。

3.误用黄金比近似公式计算整数项

✗ 错误用 Binet 公式 round(φ^n / √5) 计算 n=50,得到错误整数
✓ 修复使用递推或矩阵快速幂算法直接计算整数项

Binet 公式涉及浮点数运算,n 较大时浮点误差导致舍入错误。整数斐波那契数必须用精确整数算法,黄金比仅适用于近似值或比值计算。

4.混淆斐波那契数列与卢卡斯数列

✗ 错误输入 n=5 期望得到 5,但工具返回 11(卢卡斯数列)
✓ 修复确认工具标题为「斐波那契数列」,起始项为 F(1)=1, F(2)=1

卢卡斯数列起始为 L(1)=1, L(2)=3,后续项不同。若用户误用卢卡斯定义,结果完全偏离。

5.负索引输入导致未定义行为

✗ 错误输入 n=-5 期望得到对称扩展值
✓ 修复输入 n=5 或查阅工具是否支持负索引(通常不支持)

标准斐波那契数列定义在正整数上。负索引扩展(如 F(-n)=(-1)^(n+1)F(n))非常规实现,多数工具会报错或返回 NaN。

6.黄金比计算时误用小数位数

✗ 错误输入 n=100 期望 φ^100 精确到 100 位小数
✓ 修复输入 n=100,工具返回 φ^100 的近似值(如 3.54224848179262e+20,精度取决于实现)

黄金比 φ 是无理数,其幂次无法精确表示为有限小数。工具通常返回浮点数近似值,位数受限于 Number 精度或后端配置。

7.将斐波那契数列与斐波那契编码混淆

✗ 错误输入数字 10 期望得到斐波那契数列第 10 项
✓ 修复输入 n=10 得到 F(10)=55

斐波那契编码(Zeckendorf 表示)是将整数分解为不连续斐波那契数之和,与数列本身是不同概念。工具若同时提供编码功能需明确区分。

第三节

工作原理

How It Works

核心公式

F_n = (φ^n - ψ^n) / √5, 其中 φ = (1+√5)/2, ψ = (1-√5)/2

变量说明

  • F_n第 n 项斐波那契数
  • n非负整数,表示项序号
  • φ黄金比例,约 1.6180339887
  • ψφ 的共轭,约 -0.6180339887

示例

n=10:φ^10 ≈ 122.991869, ψ^10 ≈ 0.008130, 差值 122.983739, 除以 √5≈2.236068, 得 F_10≈55.0000, 取整为 55。

输入 n(项数 / 大数)迭代计算F(0)=0, F(1)=1大数加法(BigInt 无溢出)F(n)计算黄金比F(n)/F(n-1)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

6 种主流语言实现,复制即用:

def fibonacci(n: int) -> int: """返回第 n 项斐波那契数(n 从 0 开始)""" if n < 0: raise ValueError('n must be non-negative') a, b = 0, 1 for _ in range(n): a, b = b, a + b return a # 示例:第 10 项(0-indexed) print(fibonacci(10)) # 55
function fibonacci(n: number): number { if (n < 0) throw new Error('n must be non-negative'); let a = 0, b = 1; for (let i = 0; i < n; i++) { [a, b] = [b, a + b]; } return a; } // 示例:第 10 项(0-indexed) console.log(fibonacci(10)); // 55
package main import "fmt" func fibonacci(n int) int { if n < 0 { panic("n must be non-negative") } a, b := 0, 1 for i := 0; i < n; i++ { a, b = b, a+b } return a } func main() { fmt.Println(fibonacci(10)) // 55 }
fn fibonacci(n: u64) -> u64 { match n { 0 => 0, 1 => 1, _ => { let (mut a, mut b) = (0, 1); for _ in 1..n { let c = a + b; a = b; b = c; } b } } } fn main() { println!("{}", fibonacci(10)); // 55 }
public class Fibonacci { public static long fibonacci(int n) { if (n < 0) throw new IllegalArgumentException("n must be non-negative"); long a = 0, b = 1; for (int i = 0; i < n; i++) { long temp = a + b; a = b; b = temp; } return a; } public static void main(String[] args) { System.out.println(fibonacci(10)); // 55 } }
function fibonacci(int $n): int { if ($n < 0) { throw new InvalidArgumentException('n must be non-negative'); } $a = 0; $b = 1; for ($i = 0; $i < $n; $i++) { [$a, $b] = [$b, $a + $b]; } return $a; } echo fibonacci(10); // 55
第五节

常见问题

Q & A
这个计算器能算第1000项吗?会不会卡死或者结果不对?

能,而且不会卡死。本工具用纯前端大数算法,第1000项有209位数字,浏览器直接算完显示,不需要联网。唯一限制是你的电脑内存,普通笔记本算到第10000项(约2090位)都没问题,再往上可能会因为数字太长页面渲染变慢。如果感觉慢,可以分批算,不用一次拉到最大。

我输入10000它算出来一堆数字,怎么知道对不对?

可以用相邻项比例验证。斐波那契数列相邻两项比值会趋近黄金分割比1.6180339887...,你随便挑一个大数项(比如第9999项和第10000项),用计算器除一下,前10位应该和黄金比一致。另外本工具全部用整数运算,没有浮点误差,结果100%精确。如果不放心,还可以用递推公式反推几项,看是否连续。

为什么我输入负数它提示错误?斐波那契数列不是可以扩展成负的吗?

你说的是「负斐波那契数列」,数学上确实存在,公式是 F(-n) = (-1)^(n+1) × F(n)。但本工具只处理标准正整数项,因为绝大多数用户场景(比如股票斐波那契回撤、编程算法题)都用正项。如果你需要负数项,可以用这个公式手动转换:先算正数项,然后根据n的奇偶性加负号。

算出来的黄金比例小数点后能精确到多少位?

本工具用连续两项的比值计算黄金比,精度取决于你选的项数。比如第20项和第21项的比值只能精确到小数点后4位(1.6180),第100项和第101项能到小数点后20位以上。工具直接显示完整结果,没有截断。如果你需要固定位数(比如金融场景要15位),建议用第100项以后的结果,前面的项精度不够。

这和手机计算器或者Excel算出来的不一样?

因为手机计算器和Excel有精度上限。Excel的数字精度只有15位,第79项就超过这个范围,后面全变成科学计数法并丢失低位数字。本工具用JavaScript BigInt,理论上可以算任意位整数,不截断不四舍五入。如果你对比第50项以内,结果应该完全一致;超过第79项,本工具的结果才是完整的。

我浏览器关了再打开,刚才算的结果怎么没了?

本工具纯前端运行,所有计算都在内存里完成,关闭页面后数据不会保存。这是故意的——你的数据不上传服务器,隐私安全。如果你需要保留结果,算完后手动复制粘贴到记事本或收藏夹。如果你经常用,可以把工具页面加入浏览器书签,下次打开还是同一个界面,但之前的结果不会恢复。

算到第几十项的时候数字特别长,能不能复制出来用?

可以,直接选中结果文本复制就行。本工具的结果区域是纯文本格式,没有图片或特殊字符,复制到Excel、记事本、代码编辑器都能正常粘贴。如果数字太长(超过1000位),建议分多次复制,或者先复制到记事本再处理,直接粘贴到某些聊天软件可能会被截断。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭