编程之美2.9-斐波那契(Fibonacci)数列

斐波那契数列是一个非常美丽、和谐的数列,有人说它起源于一对繁殖力惊人、基因非常优秀的兔子,也有人说远古时期的鹦鹉螺就知道这个规律。
这里写图片描述

斐波那契数列由如下递推关系式定义:
F ( n ) = { 0 if n = 0 1 if n = 1 F ( n − 1 ) + F ( n − 2 ) if n >1 F(n) = \begin{cases} 0 & \text{if n = 0}\\ 1 & \text{if n = 1}\\ F(n-1)+F(n-2) &\text{if n >1} \end{cases} F(n)=01F(n1)+F(n2)if n = 0if n = 1if n >1

int Fibonacci (int n)
{
	if (n <= 0) return 0;
	else if (n == 1) return 1;
	else return Fibonacci(n - 1) + Fibonacci(n - 2);
}

求解通项公式
由递推公式 F ( n ) = F ( n − 1 ) + F ( n − 2 ) , 我 们 知 道 F ( n ) 的 特 征 方 程 为 : F(n) = F(n-1) + F(n-2),我们知道F(n)的特征方程为: F(n)=F(n1)+F(n2)F(n)
x 2 = x + 1 x^2 = x + 1 x2=x+1
有根: X 1 , 2 = 1 ± 5 2 X_{1,2} = \frac{1\pm\sqrt{5}}{2} X1,2=21±5
所以存在$A,B $ 使得:
F ( n ) = A × ( 1 + 5 2 ) n + B × ( 1 − 5 2 ) n F(n) = A\times(\frac{1+\sqrt{5}}{2})^n+B\times(\frac{1-\sqrt{5}}{2})^n F(n)=A×(21+5 )n+B×(215 )n
代入 F ( 0 ) = 0 , F ( 1 ) = 1 F(0) = 0,F(1) = 1 F(0)=0,F(1)=1,解得 A = 5 5 , B = − 5 5 A=\frac{\sqrt{5}}{5},B=-\frac{\sqrt{5}}{5} A=55 ,B=55

F ( n ) = 5 5 × ( 1 + 5 2 ) n − 5 5 × ( 1 − 5 2 ) n F(n) = \frac{\sqrt{5}}{5}\times(\frac{1+\sqrt{5}}{2})^n-\frac{\sqrt{5}}{5}\times(\frac{1-\sqrt{5}}{2})^n F(n)=55 ×(21+5 )n55 ×(215 )n
通过公式,我们可以在O(1)的时间内得到F(n)。但公式中引入了无理数,所以不能保证结果的精确。

扩展问题
假 设 A ( 0 ) = 1 , A ( 1 ) = 2 , A ( 2 ) = 2. 对 于 n > 2 , 都 有 A ( k ) = A ( k − 1 ) + A ( k − 2 ) + A ( k − 3 ) 假设A(0) = 1, A(1) = 2, A(2) = 2.对于n>2,都有A(k) = A(k-1) + A(k-2) + A(k-3) A(0)=1,A(1)=2,A(2)=2.n>2A(k)=A(k1)+A(k2)+A(k3)

  1. 对 于 任 何 一 个 给 定 的 n , 如 何 计 算 出 A ( n ) ? 对于任何一个给定的n,如何计算出A(n)? n,A(n)?
  2. 对 于 n 非 常 大 的 情 况 , 如 n = 2 60 的 时 候 , 如 何 计 算 A ( n ) m o d    M ( M < 100000 ) 呢 ? 对于n非常大的情况,如n = 2^{60}的时候,如何计算A(n) \mod M (M\lt100000)呢? nn=260A(n)modM(M<100000)

由递推公式 A ( k ) = A ( k − 1 ) + A ( k − 2 ) + A ( k − 3 ) , 我 们 知 道 A ( n ) 的 特 征 方 程 为 : A(k) = A(k-1) + A(k-2) + A(k-3),我们知道A(n)的特征方程为: A(k)=A(k1)+A(k2)+A(k3)A(n)
x 3 = x 2 + x + 1 x^3 = x^2+ x + 1 x3=x2+x+1
所以存在 A , B , C A,B,C A,B,C使得:
A ( n ) = − A + B × ( 1 + 5 2 ) n + C × ( 1 − 5 2 ) n A(n) = -A+B\times(\frac{1+\sqrt{5}}{2})^n+C\times(\frac{1-\sqrt{5}}{2})^n A(n)=A+B×(21+5 )n+C×(215 )n
解得:
A ( n ) = 4 3 + 5 − 1 6 × ( 1 + 5 2 ) n − 5 + 1 6 × ( 1 − 5 2 ) n A(n) = \frac43 + {\sqrt{5}-1\over6}\times(\frac{1+\sqrt{5}}{2})^n-{\sqrt{5}+1\over6}\times(\frac{1-\sqrt{5}}{2})^n A(n)=34+65 1×(21+5 )n65 +1×(215 )n

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值