斐波拉契数列
1 兔子繁殖问题
从前有一对长寿的兔子,他们每一个月生一对小兔子,新生的小兔子两个月就长大了,在第二个月的月底就开始生他们的下一代小兔子,这样一代一代生下去。求解兔子每月增长的数量的数列。
相信很多人一眼就能看出是一个斐波拉契数列,然后立马抽象成数学公式:f(n)=f(n−2)+f(n−1)f(n)=f(n-2)+f(n-1)f(n)=f(n−2)+f(n−1)
但是总困绕着我一个问题:怎么从实际场景去理解这个规律呢?
从题目中很自然得出这样一个结论:每个月的兔子数量由具有繁殖能力的老兔子、刚生下的新兔子、满一个月的兔子,这三部分组成。
从图中我们可以得出以下结论:
- 在每月中老兔子繁殖产生新兔子(每月中老兔子的数量等于新兔子的数量)
- 满一个月的兔子在下个月会变成老兔子(上个月老兔子的数量加上满一个月兔子的数量等于下一个月老兔子的数量)
- 上个月的新兔子在下个月会变成满一个月的兔子(上个月新兔子的数量等于下个月满一个月兔子的数量)
n=kn=kn=k月的新兔子数量等于当月老兔子数量,n=kn=kn=k月的老兔子数量等于n=k−1n=k-1n=k−1月的老兔子数量加上n=k−1n=k-1n=k−1月的满一个月兔子的数量,而每个月老兔子的数量等于新兔子的数量,且n=k−1n=k-1n=k−1月的满一个月的兔子数量等于n=k−2n=k-2n=k−2月新兔子的数量。所以:n=kn=kn=k月的新兔子数量等于n=k−1n=k-1n=k−1月的新兔子数量加上n=k−2n=k-2n=k−2月新兔子数量。
2 爬楼梯问题
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
相信很多人都知道这也是一个斐波拉契数列。抽象成数学公式:f(n)=f(n−2)+f(n−1)f(n)=f(n-2)+f(n-1)f(n)=f(n−2)+f(n−1)
利用实际场景去理解:爬 n 阶楼梯时,第一步要么跨1个台阶要么跨2个台阶,如果跨1个台阶则有f(n−1)f(n-1)f(n−1)种方法,如果跨2个台阶则有f(n−2)f(n-2)f(n−2)种方法。