斐波那契数列

任意项/大数/黄金比

408 次访问

斐波那契数列

斐波那契 / 卢卡斯 / Tribonacci / Tetranacci / 自定义 k 阶

范围 1 ~ 2000;N > 78 自动启用 BigInt 保精度

10 ~ 100;过大数项会自动截断显示

第 N 项
前 N 项总和 S(N)
相邻比 F(N)/F(N−1)
前 N 项

数列检索

判断任意数是否为斐波那契数 / 第几项

原理:一个正整数 x 是斐波那契数,当且仅当 5x² + 45x² − 4 是完全平方数(J. H. E. Cohn, 1964)。本工具对小数走解析判定,超大数走 BigInt 序列匹配。

黄金分割收敛

F(n+1) / F(n) → φ ≈ 1.6180339887...

理论值 φ = (1+√5)/2 ≈ 1.6180339887498948。 斐波那契相邻项比值随 n 增大单调收敛于 φ,下表展示前 30 项的相邻比与误差(误差 = |比值 − φ|):

nF(n)F(n+1)F(n+1)/F(n)误差 |Δφ|

三种算法实测对比

递归 O(φⁿ) · DP O(n) · 矩阵幂 O(log n)

以当前 N 为输入,分别用三种算法计算 F(N) 并实测耗时。 递归法对 N > 35 自动跳过(避免阻塞浏览器);DP 与矩阵法在浏览器 BigInt 下都能秒算到 F(2000)。

算法时间复杂度空间复杂度耗时结果一致

黄金矩形 + 黄金螺旋

1, 1, 2, 3, 5, 8, 13, 21 内接螺旋

将边长为 1, 1, 2, 3, 5, 8, 13, 21 的方块螺旋排列,相邻方块的对角弧线即为黄金螺旋(Golden Spiral)。 这是自然界鹦鹉螺、向日葵、星系旋臂的视觉本源。

数列性质(核心恒等式)

含数值验算

斐波那契回撤位(金融应用)

23.6% / 38.2% / 50% / 61.8% / 78.6%

在技术分析中,价格在上涨后回调(或下跌后反弹)常停留在斐波那契比例位。下面以一段示例区间作演示,可修改高低点。

说明:23.6% / 38.2% / 61.8% / 78.6% 是斐波那契比例(1−φ⁻¹、φ⁻², φ⁻¹、√(φ⁻¹)); 50% 严格来说不是斐波那契位,但因其心理强支撑而被广泛采用。本工具仅作教学演示,不构成投资建议。

应用领域

自然界 · 算法 · 艺术
植物花序
向日葵花盘螺旋数、松果鳞片数、菠萝凸块数几乎都是相邻两个斐波那契数(13/21、21/34、34/55)。这是植物最大化叶片采光的最优排列。
兔子繁殖(原始问题)
1202 年斐波那契《算盘书》提出:一对兔子每月生一对幼兔,幼兔下月成年再生。第 n 个月兔子总对数即 F(n)。
动态规划
爬楼梯、解码方法、青蛙跳台阶等问题的状态转移方程 dp[i]=dp[i-1]+dp[i-2] 与斐波那契递推完全一致。
算法效率
朴素递归求 F(n) 的调用次数本身就是斐波那契数,时间复杂度 O(φⁿ);这是教科书"为什么要记忆化"最经典的反例。
数据结构
斐波那契堆(Fibonacci Heap)将 Dijkstra 最短路从 O((V+E) log V) 优化到 O(E + V log V),得名于其级联剪切操作产生的斐波那契式增长。
艺术构图
达芬奇《蒙娜丽莎》、希腊帕台农神庙、苹果 LOGO 设计稿都遵循黄金矩形比例。摄影"螺旋构图"即把视觉中心放在黄金螺旋的内核。
金融市场
技术分析中的斐波那契回撤、扩展、时间窗皆由斐波那契数与黄金比延伸而来,是趋势交易者最常用的辅助指标之一。
天体物理
部分螺旋星系(如 NGC 1232、M51)的旋臂展开角接近黄金螺旋;这与气体云在旋转引力场中的对数螺旋演化有关。

公式速查

· 递推: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 个典型场景,覆盖常规、边界与易错

输入输出说明
1055典型常规场景:计算第 10 项
5012586269025典型常规场景:计算第 50 项,结果已超亿级
00边界 case:第 0 项定义为 0
100043466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875边界 case:大数计算,验证工具支持任意长度
11边界 case:第 1 项定义为 1
14744.992254...e308边界 case:接近双精度浮点数上限的项数
-55易错 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... 四舍五入得 12586269025
修复
F(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)=5
修复
F(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) = -5
修复
F(-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)=11
修复
F(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.617
修复
F(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 的精确整数结果,不受浮点限制。

原理图

输入 n(第几项 / 大数)迭代计算F(n) = F(n-1) + F(n-2)(浏览器内,无网络请求)输出结果F(n) 值(可显示黄金比)选择“大数模式”BigInt 精确计算任意大数精确值特点:所有计算在浏览器本地完成,数据不上传服务器,适合大数/隐私场景
用户输入 本地处理 输出结果

开发者集成

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.618033988749895
package 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 个高频疑问

这个工具能算第1000项吗?显示的数字会不会不准?
可以算。工具使用 JavaScript 的 BigInt 类型处理大数,第 1000 项(约 209 位十进制数)能精确计算并完整显示,没有科学计数法截断。BigInt 是 ES2020 标准整数类型,在 Chrome 89+/Firefox 90+/Edge 89+ 上原生支持,运算结果与数学定义完全一致。如果输入 10000 项,数字约 2090 位,浏览器渲染会有几百毫秒延迟,但结果仍然精确。
为什么我输入 n=0 或负数,结果不是 0?
数列标准定义中 F(0)=0,F(1)=1,负索引无通用定义。本工具只接受非负整数输入,输入 0 返回 0,输入负数会提示“请输入非负整数”。如果需要负索引的扩展斐波那契(斐波那契数列反向延伸),那是另一套递推规则(F(-n) = (-1)^(n+1) * F(n)),本工具不适用。
这个工具算出来的黄金分割比(φ)和网上查到的 1.618 不完全一样,是算错了吗?
没有算错。相邻两项比值趋近黄金分割比 φ = (1+√5)/2 ≈ 1.6180339887…,但这是无限不循环小数。工具显示的是前一项除以后一项的精确分数(BigInt 除法取整数部分),或者按浮点数显示到 15 位小数。如果看到 1.618033988749894,那是双精度浮点数的精度极限(约 15-17 位有效数字),并非计算错误。要更多小数位,可用高精度浮点数库单独计算 √5。
这个工具和手机计算器算的斐波那契数列结果不一样,哪个准?
本工具准。手机计算器(如 iOS 计算器、小米计算器等)在 n≥79 时会因浮点数溢出显示 Infinity 或科学计数法截断,因为双精度浮点数最大安全整数约 9e15。本工具用 BigInt 整数运算,n=1000 仍然精确。如果手机计算器给出整数结果(如 n=50 时显示 12586269025),两者一致;n≥79 后差异出现。
输入 1000000(一百万)会不会让浏览器卡死或崩溃?
会。第 100 万项约有 208987 位数字,BigInt 运算和 DOM 渲染都需要大量内存(约 200-300MB),低端手机或 4GB 内存电脑可能浏览器标签页崩溃。本工具没有后端服务器,所有计算在浏览器中完成,建议 n 不超过 10000(约 2090 位)。如果需要大数验证,可以分步计算:先算到 10000,再继续递推,但浏览器内存会持续增长,不建议单次超过 50000。
斐波那契数列计算的结果和用递归公式算的有什么区别?
本工具使用迭代递推(从 F(0) 和 F(1) 开始循环相加),不是递归或通项公式(比内公式)。递归在 n>40 时因重复计算会极慢甚至栈溢出;通项公式涉及无理数 √5 的浮点运算,n 较大时因浮点误差结果不精确。迭代递推是 O(n) 时间、O(1) 空间,且 BigInt 保证整数精确,n=1000 时结果与通项公式四舍五入后的整数一致。
为什么我输入小数(比如 5.5)它说输入不合法?斐波那契数列不是可以推广到实数吗?
斐波那契数列的标准定义只针对整数索引(n 为非负整数)。实数域的推广(如斐波那契函数、黄金比例函数)使用比内公式对实数定义,但涉及复数运算和伽马函数,不在本工具范围内。本工具只做整数项计算,输入小数会提示“请输入非负整数”。如果需要实数推广,可以搜索“斐波那契函数在线计算器”使用专门的数学软件。
选择 打开 +新窗口 esc关闭