跳到主内容
UniKit

斐波那契计算器

用快速倍增算法精确计算第 n 项斐波那契数(n 最大 10000),并给出前 n 项列表、相邻项比值与黄金比的误差、是否为斐波那契数以及卢卡斯数列对照。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

项序号 n范围 0 ≤ n ≤ 10000,F(0) = 0,F(1) = 1
第 n 项 F(n)

输入 n 后自动计算

黄金比 φ = 1.618033988749895…

是否为斐波那契数

输入整数后自动判定

判定依据:5x² ± 4 中有一个是完全平方数

卢卡斯数列对照

卢卡斯数 L(0) = 2,L(1) = 1,L(n) = 2F(n+1) − F(n)

nF(n)L(n)
002
111
213
324
437
5511
6818
71329
82147
93476

这个工具能做什么

  • 写算法题或面试题时核对第 n 项斐波那契数:普通语言里 F(79) 之后就超出 double 精度,这里用 BigInt 给精确值。
  • 观察相邻项比值如何逼近黄金比:F(11)/F(10) 已经是 1.618181818181,误差 1.478e-4,很适合讲清楚为什么比值会收敛。
  • 判断一个整数是不是斐波那契数(例如 144 是、145 不是),用来做数据校验或数列筛选。
  • 对照卢卡斯数列:L(0)=2、L(1)=1,用 L(n) = 2F(n+1) − F(n) 和斐波那契数一起看,能直观理解两者的关系。

示例

输入

n = 10

输出

F(10) = 55;位数 2;比值 F(11)/F(10) = 1.618181818181;与黄金比误差 1.478e-4;L(10) = 123

n 从 0 开始,F(0) = 0、F(1) = 1;比值从 n ≥ 1 才有,且用定点除法截断到 12 位小数。

常见问题

F(0) 是 0 还是 1?

这里是 F(0) = 0、F(1) = 1,也就是从 0 开始的经典定义,前几项是 0、1、1、2、3、5、8……有些教材从 1 开始编号,对照时注意差一位。

为什么普通语言算 F(80) 就不准了?

F(79) 已经超过 2^53,double 只能精确表示到 9007199254740992,再往上只能存近似值。这个工具用 BigInt 做整数运算,并用快速倍增把 n 次的循环降到 O(log n) 次大数乘法,所以 n = 10000 也能给出精确结果。

「是否为斐波那契数」是怎么判断的?

用的是充要条件:如果 5x² + 4 或 5x² − 4 中有一个是完全平方数,那么 x 就是斐波那契数。所以 144 判为是、145 判为不是;负数会报错,超过 1000 位的整数会拒绝判定。

相邻项比值和黄金比为什么不是完全相等?

F(n+1)/F(n) 只在 n 趋向无穷时才等于 (1+√5)/2,有限项总有误差。工具里比值用定点除法截断到 12 位小数,误差按科学计数法显示,n 越大误差越小。

会联网吗?输入会上传吗?

不会。数列计算全部在浏览器本地用 BigInt 完成,页面不发送任何请求,输入的数字也不会上传。

关键词:fibonacci斐波那契golden ratio黄金比lucas卢卡斯数fast doubling数列

同类工具