斐波那契数列
任意项/大数/黄金比
数列检索
原理:一个正整数 x 是斐波那契数,当且仅当 5x² + 4 或
5x² − 4
是完全平方数(J. H. E. Cohn, 1964)。本工具对小数走解析判定,超大数走 BigInt 序列匹配。
黄金分割收敛
理论值 φ = (1+√5)/2 ≈ 1.6180339887498948。 斐波那契相邻项比值随 n 增大单调收敛于 φ,下表展示前 30 项的相邻比与误差(误差 = |比值 − φ|):
| n | F(n) | F(n+1) | F(n+1)/F(n) | 误差 |Δφ| |
|---|
三种算法实测对比
以当前 N 为输入,分别用三种算法计算 F(N) 并实测耗时。 递归法对 N > 35 自动跳过(避免阻塞浏览器);DP 与矩阵法在浏览器 BigInt 下都能秒算到 F(2000)。
| 算法 | 时间复杂度 | 空间复杂度 | 耗时 | 结果一致 |
|---|
黄金矩形 + 黄金螺旋
将边长为 1, 1, 2, 3, 5, 8, 13, 21 的方块螺旋排列,相邻方块的对角弧线即为黄金螺旋(Golden Spiral)。 这是自然界鹦鹉螺、向日葵、星系旋臂的视觉本源。
数列性质(核心恒等式)
斐波那契回撤位(金融应用)
在技术分析中,价格在上涨后回调(或下跌后反弹)常停留在斐波那契比例位。下面以一段示例区间作演示,可修改高低点。
说明:23.6% / 38.2% / 61.8% / 78.6% 是斐波那契比例(1−φ⁻¹、φ⁻², φ⁻¹、√(φ⁻¹)); 50% 严格来说不是斐波那契位,但因其心理强支撑而被广泛采用。本工具仅作教学演示,不构成投资建议。
应用领域
公式速查
· 递推:F(1) = F(2) = 1,F(n) = F(n−1) + F(n−2),n ≥ 3
· 通项 Binet: F(n) = ( φⁿ − ψⁿ ) / √5,其中 φ = (1+√5)/2,ψ = (1−√5)/2
· 求和: S(n) = F(1) + F(2) + ... + F(n) = F(n+2) − 1
· 奇数项和: F(1) + F(3) + F(5) + ... + F(2n−1) = F(2n)
· 偶数项和: F(2) + F(4) + F(6) + ... + 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'Ocagne 恒等式: F(m) · F(n+1) + F(m−1) · F(n) = F(m+n)
· 倍角公式: F(2n) = F(n) · ( 2·F(n+1) − F(n) ),F(2n+1) = F(n+1)² + F(n)²
· 黄金比: limn→∞ F(n+1) / F(n) = φ = 1.6180339887498948...
· 矩阵形式: [[F(n+1), F(n)], [F(n), F(n−1)]] = [[1,1],[1,0]]ⁿ,用快速幂可在 O(log n) 求 F(n)
关于本工具
了解工具定位 · 使用场景 · 对比优势
使用场景
黄金比例构图
平面设计师、UI 设计师需要按 1:1.618 的黄金比例进行版式分割或元素定位。直接在工具中计算斐波那契数列的相邻项比值,可以快速获得高精度的黄金比例近似值(如 89/55 ≈ 1.61818),无需手动计算或查阅表格,确保画面分割的视觉和谐。
技术分析回测
量化交易员或股票投资者使用斐波那契回调线(0.382、0.618、1.618)预测支撑位和阻力位。本工具支持大数运算,能快速生成第 100 项甚至更大项的值,为回测历史数据中的回调位提供精确数值基准,避免因浮点误差导致策略信号偏移。
自然数列比对
生物爱好者或教育工作者在观察植物叶序、花瓣数(如雏菊 21、34 瓣)或蜂巢结构时,需要验证实际计数是否与斐波那契数列吻合。使用本工具生成连续项序列(如第 1-20 项),可以快速对照实物计数结果,辅助完成课堂实验或自然观察记录。
算法性能测试
计算机专业学生在学习递归、动态规划、矩阵幂等算法时,需要构造大输入规模(如 n=100000)的斐波那契数作为测试用例。本工具支持任意项和大数计算,能瞬间生成超长整数结果,免去手写大数库的麻烦,直接用于对比不同算法的时间与空间复杂度。
对比矩阵本工具 vs 竞品 vs 传统方法
| 维度 | 本工具 | 竞品 A (Wolfram Alpha) | 传统方法 (手算/编程) |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,数据不上传服务器 | 计算请求发送至云端服务器 | 数据完全本地,不依赖网络 |
| 处理速度 | 毫秒级返回结果 | 1-5 秒(含网络延迟) | 手算极慢;编程需编译运行,秒级 |
| 离线可用 | 完全离线,断网可用 | 必须联网 | 完全离线 |
| 大数支持 | 支持任意大数(BigInt),无位数限制 | 支持大数,但免费版有结果展示长度限制 | 需自行实现大数库,如 GMP |
| 黄金比计算 | 内置黄金比 φ 计算,一键输出 | 需输入公式 `golden ratio` 或 `phi` | 需手动计算 (1+√5)/2,或编程实现 |
| 收费与注册 | 免费,无需注册 | 免费版有每日查询次数限制,高级功能需订阅 | 免费(需自备编程环境或计算器) |
| 使用门槛 | 打开即用,无需学习 | 需了解自然语言查询语法 | 需掌握数学推导或编程技能 |
使用指南
上手步骤 · 输入输出 · 避坑提示
输入输出示例7 个典型场景,覆盖常规、边界与易错
| 输入 | 输出 | 说明 |
|---|---|---|
| 10 | 55 | 典型常规场景:计算第 10 项 |
| 50 | 12586269025 | 典型常规场景:计算第 50 项,结果已超亿级 |
| 0 | 0 | 边界 case:第 0 项定义为 0 |
| 1000 | 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875 | 边界 case:大数计算,验证工具支持任意长度 |
| 1 | 1 | 边界 case:第 1 项定义为 1 |
| 1474 | 4.992254...e308 | 边界 case:接近双精度浮点数上限的项数 |
| -5 | 5 | 易错 case:负索引按绝对值计算,结果为正 |
常见错误对照8 个常踩的坑 · 错误 → 修复
1. 把斐波那契数列当成“质数生成器”
F(7)=13, F(11)=89, F(13)=233, 所以斐波那契数全是质数?F(4)=3, F(5)=5, F(6)=8, F(7)=13, F(8)=21, F(9)=34, F(10)=55, F(11)=89, F(12)=144斐波那契数列中只有 F(3)=2, F(4)=3, F(5)=5, F(7)=13, F(11)=89, F(13)=233, F(17)=1597 等少数是质数;F(6)=8、F(8)=21 都是合数。
2. 用整数溢出结果验证大数
F(100)=354224848179261915075,但用 int64 算出来是负数F(100)=354224848179261915075(正确值),int64 最大 9223372036854775807,F(93)=12200160415121876738 已溢出F(93) 就超过了 64 位有符号整数上限。本工具使用 BigInt/大数库,可精确计算任意项。
3. 用黄金分割比近似公式代替精确计算
F(50) ≈ φ^50 / √5 = 12586269025.000000... 四舍五入得 12586269025F(50)=12586269025(精确值),用浮点计算 φ^50/√5 会因浮点精度丢失末尾几位Binet 公式(φ^n/√5)在 n 较小时可用四舍五入,但 n≥70 时双精度浮点数尾数不够,结果会偏差。本工具用整数递推,无精度损失。
4. 把 F(0) 当成 1 或未定义
F(0)=1, F(1)=1, F(2)=2, F(3)=3, F(4)=5F(0)=0, F(1)=1, F(2)=1, F(3)=2, F(4)=3, F(5)=5标准定义(OEIS A000045)中 F(0)=0, F(1)=1。部分旧教材用 F(1)=1, F(2)=1 的偏移定义,但本工具采用 F(0)=0 的现代数学标准。
5. 输入负索引期望对称结果
F(-5) 应该等于 -F(5) = -5F(-5)=5, F(-6)=-8, F(-7)=13, F(-8)=-21负索引斐波那契满足 F(-n)=(-1)^{n+1}F(n),不是简单的取反。F(-5)=(-1)^6·F(5)=5,F(-6)=(-1)^7·F(6)=-8。
6. 把斐波那契数列和卢卡斯数列混淆
F(1)=1, F(2)=3, F(3)=4, F(4)=7, F(5)=11F(1)=1, F(2)=1, F(3)=2, F(4)=3, F(5)=5卢卡斯数列 L(n) 初始值为 L(0)=2, L(1)=1,递推关系相同但初始值不同。本工具计算的是标准斐波那契数列。
7. 用斐波那契数列计算黄金分割比时忘记取极限
F(10)/F(9)=55/34≈1.617647,直接说黄金分割比是 1.617F(10)/F(9)=55/34≈1.617647,黄金分割比 φ=(1+√5)/2≈1.618034,n 越大越接近相邻项比值收敛到 φ,但 F(10)/F(9) 只有 4 位有效数字精度。F(20)/F(19)≈1.618034,F(40)/F(39) 可达 15 位精度。
8. 在需要模运算时用完整数列手工取模
F(1000) mod 1000 = 手动计算 354224848179261915075 mod 1000 = 75直接使用模运算结果:F(1000) mod 1000 = 875(Pisano 周期 π(1000)=1500,F(1000) mod 1000=875)手工计算大数 mod 容易出错,且完整 F(1000) 有 209 位数字。本工具支持直接输入模数,自动利用 Pisano 周期优化。
工作原理
公式推导 · 流程图解 · 依据出处
核心公式
F(n) = (φ^n - ψ^n) / √5
变量说明
F(n)— 第 n 项斐波那契数n— 项索引(非负整数)φ— 黄金比例 (1+√5)/2 ≈ 1.618034ψ— 1-φ = (1-√5)/2 ≈ -0.618034
示例
计算第 10 项:φ=1.618034, ψ=-0.618034。φ^10 ≈ 122.991, ψ^10 ≈ 0.008。F(10) = (122.991 - 0.008) / 2.23607 ≈ 55。验证:0,1,1,2,3,5,8,13,21,34,55 ✓
适用范围
比奈公式(Binet's formula)适用于所有非负整数 n,n=0 时 F(0)=0。当 n≥70 时 φ^n 溢出 64 位浮点数精度,本工具使用大数算法(BigInt)支持任意大 n 的精确整数结果,不受浮点限制。
原理图
开发者集成
3 种主流语言 · 复制即用
import sys
sys.set_int_max_str_digits(100000) # 允许打印大数字符串
def fib(n: int) -> int:
"""返回第 n 个斐波那契数(n>=0),使用快速倍增法,O(log n)"""
if n < 0:
raise ValueError("n must be >= 0")
if n == 0:
return 0
# 快速倍增:F(2k) = F(k)*(2*F(k+1)-F(k))
# F(2k+1) = F(k+1)^2 + F(k)^2
def fib_pair(k: int):
if k == 0:
return (0, 1)
a, b = fib_pair(k >> 1)
c = a * (2 * b - a)
d = a * a + b * b
if k & 1:
return (d, c + d)
else:
return (c, d)
return fib_pair(n)[0]
# 示例:第 100 项(大数)
print(fib(100)) # 354224848179261915075
# 示例:黄金比近似(F(n+1)/F(n))
print(fib(101) / fib(100)) # 1.618033988749895package main
import (
"fmt"
"math/big"
)
// Fib 返回第 n 个斐波那契数(n>=0),使用快速倍增法,O(log n)
func Fib(n int) *big.Int {
if n < 0 {
panic("n must be >= 0")
}
if n == 0 {
return big.NewInt(0)
}
var fibPair func(k int) (*big.Int, *big.Int)
fibPair = func(k int) (*big.Int, *big.Int) {
if k == 0 {
return big.NewInt(0), big.NewInt(1)
}
a, b := fibPair(k >> 1)
// c = a * (2*b - a)
twoB := new(big.Int).Mul(big.NewInt(2), b)
twoB.Sub(twoB, a)
c := new(big.Int).Mul(a, twoB)
// d = a^2 + b^2
a2 := new(big.Int).Mul(a, a)
b2 := new(big.Int).Mul(b, b)
d := new(big.Int).Add(a2, b2)
if k&1 == 1 {
return d, new(big.Int).Add(c, d)
}
return c, d
}
res, _ := fibPair(n)
return res
}
func main() {
// 示例:第 100 项
fmt.Println(Fib(100)) // 354224848179261915075
// 示例:黄金比近似(F(101)/F(100))
f100 := Fib(100)
f101 := Fib(101)
phi := new(big.Rat).SetFrac(f101, f100)
phiFloat, _ := phi.Float64()
fmt.Printf("%.15f\n", phiFloat) // 1.618033988749895
}// 快速倍增法计算第 n 个斐波那契数(n>=0),O(log n)
function fib(n) {
if (n < 0) throw new Error('n must be >= 0');
if (n === 0) return 0n;
function fibPair(k) {
if (k === 0) return [0n, 1n];
const [a, b] = fibPair(k >> 1);
const c = a * (2n * b - a);
const d = a * a + b * b;
if (k & 1) return [d, c + d];
return [c, d];
}
return fibPair(n)[0];
}
// 示例:第 100 项(BigInt 支持任意大数)
console.log(fib(100).toString()); // 354224848179261915075
// 示例:黄金比近似(F(101)/F(100))
const f100 = fib(100);
const f101 = fib(101);
const phi = Number(f101) / Number(f100);
console.log(phi); // 1.618033988749895常见问题
7 个高频疑问