斐波那契计算器
用快速倍增算法精确计算第 n 项斐波那契数(n 最大 10000),并给出前 n 项列表、相邻项比值与黄金比的误差、是否为斐波那契数以及卢卡斯数列对照。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
输入 n 后自动计算
黄金比 φ = 1.618033988749895…
输入整数后自动判定
判定依据:5x² ± 4 中有一个是完全平方数
卢卡斯数 L(0) = 2,L(1) = 1,L(n) = 2F(n+1) − F(n)
| n | F(n) | L(n) |
|---|---|---|
| 0 | 0 | 2 |
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 4 |
| 4 | 3 | 7 |
| 5 | 5 | 11 |
| 6 | 8 | 18 |
| 7 | 13 | 29 |
| 8 | 21 | 47 |
| 9 | 34 | 76 |
这个工具能做什么
- 写算法题或面试题时核对第 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数列