斐波那契数列的应用
2016-02-10 16:04
211 查看
[code] 斐波那契以兔子繁殖为切入,提出一个古典问题: 有一对兔子,从出生后第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)
相关文章推荐
- c#之异常之线程访问控件
- 7、KNN(K近邻)
- Java NIO5:选择器1---理论篇
- 6.3、朴素贝叶斯之垃圾邮件过滤
- jQuery-插件,优化
- LeetCode题解:Linked List Cycle II
- 51Nod 1049 最大子段和(简单DP)
- 第一个Java程序
- 6.2、朴素贝叶斯实例
- onethink
- BZOJ 1112 POI2008 砖块
- #Android源码#View的onMeasure方法
- Python教程学习简记6--Python 生成器 generator
- 1016. 部分A+B
- 可变长参数示例
- Maven异常:Dynamic Web Module 3.0 requires Java 1.6 or newer.
- Android studio优点及快捷键
- 我的第一个JApplet-绘制笑脸
- connot be resolved to a variable
- 最简洁的nginx反向代理例子配置