斐波那契以兔子繁殖为切入,提出一个古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
其数列是0、1、1、2、3、5、8、13、21、34、……
在数学上,斐波纳契数列以如下被以递归的方法定义: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
我刚好前几天看到google的一个面试题,题目是这样的:
假设你正在爬M阶楼梯,每次你只能爬一阶或者两阶,你能有多少种不同的方法爬到楼顶部?
其实,这完全可以运用到斐波那契数列。
以A(M)表示M阶阶梯所需要的step。
那么快爬完楼梯的时候,最后一步无非两种情况,一种:只需要迈一阶即可。另一种:只需要迈两阶即可爬完楼梯。
于是A(M)=A(M-1)+A(M-2)
A(M-1)=A(M-2)+A(M-3)
A(M-2)=A(M-3)+A(M-4)
………
而当M=1时 A(1)=1 M=2时 A(2)=2
这样便可以递归出A(3),A(4)……直到A(M)
符合斐波那契数列特点:F(n)=F(n-1)+F(n-2)
此题便解出。
爬楼梯问题的推广:
特例: 那么如果步子不仅仅是一阶或者二阶,假设一步至多迈M阶,
则 A(M)=A(M-1)+A(M-2)+…..+A(1)+A(0)
A(0)表示之前没迈一步,之后一步迈完M阶
A(0)=1;A(1)=1,A(2)=2;
递推得: A(3)=A(2)+A(1)+A(0) =4
A(4)=A(3)+A(2)+A(1)+A(0) =8
A(5)=A(4)+A(3)+A(2)+A(1)+A(0) =16
…
得A(M)=2^(M-1);
推广: M阶楼梯,假设一步迈N阶
当(1《N《M) 即一步至多M阶,同特例 由特列知 A(M)=2^(M-1);
当(1《N<M) 即一步至多N阶
A(M)=A(M-1)+A(M-2)+…..+A(M-N)
递归可得A(M)
【刷题算法】斐波那契数列的应用
最新推荐文章于 2022-06-01 17:07:32 发布