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

本文详细介绍了斐波那契数列的定义及其通项公式的推导过程,并探讨了更大规模序列A(n)的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

斐波那契数列由如下递推关系式定义:
F(n)={0if n = 01if n = 1F(n−1)+F(n−2)if n >1F(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)
x2=x+1x^2 = x + 1 x2=x+1
有根:X1,2=1±52X_{1,2} = \frac{1\pm\sqrt{5}}{2}X1,2=21±5
所以存在$A,B $ 使得:
F(n)=A×(1+52)n+B×(1−52)nF(n) = A\times(\frac{1+\sqrt{5}}{2})^n+B\times(\frac{1-\sqrt{5}}{2})^nF(n)=A×(21+5)n+B×(215)n
代入F(0)=0,F(1)=1F(0) = 0,F(1) = 1F(0)=0,F(1)=1,解得A=55,B=−55A=\frac{\sqrt{5}}{5},B=-\frac{\sqrt{5}}{5}A=55,B=55

F(n)=55×(1+52)n−55×(1−52)nF(n) = \frac{\sqrt{5}}{5}\times(\frac{1+\sqrt{5}}{2})^n-\frac{\sqrt{5}}{5}\times(\frac{1-\sqrt{5}}{2})^nF(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=260的时候,如何计算A(n)mod  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)
x3=x2+x+1x^3 = x^2+ x + 1 x3=x2+x+1
所以存在A,B,CA,B,CA,B,C使得:
A(n)=−A+B×(1+52)n+C×(1−52)nA(n) = -A+B\times(\frac{1+\sqrt{5}}{2})^n+C\times(\frac{1-\sqrt{5}}{2})^nA(n)=A+B×(21+5)n+C×(215)n
解得:
A(n)=43+5−16×(1+52)n−5+16×(1−52)nA(n) = \frac43 + {\sqrt{5}-1\over6}\times(\frac{1+\sqrt{5}}{2})^n-{\sqrt{5}+1\over6}\times(\frac{1-\sqrt{5}}{2})^nA(n)=34+651×(21+5)n65+1×(215)n

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值