目录
一.什么是斐波那契数列?
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...这个数列从第3项开始,每一项都等于前两项之和。在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。
二.类斐波那契数列问题
1.不断繁殖的兔子
有一种兔子,它出生2天后就开始以每天1只的速度繁殖后代。假设在第1天有1只这样的兔子(该兔子刚出生,从第3天起繁殖后代)。
那么到第11天,这样的兔子共有多少只?
按顺序思考,找出规律。
【第1天】只有1只动物。
【第2天】有1只动物,还没繁殖后代。合计1只。
【第3天】第1天的1只动物,繁殖1个后代。合计2只。
【第4天】第1天的1只动物,又繁殖1个后代。
第3天出生的那只动物还没繁殖后代。合计3只。
【第5天】第1天和第3天出生的2只动物又各繁殖1个后代。
第4天出生的1只动物还没繁殖后代。合计5只。
小帅是如何思考的呢?
进行归纳时,不用直接想“第n天共有几只”,而是像
- ·第n-1天出生的动物,在第n天还活着
- ·并且,第n-2天以前出生的动物,在第n天会繁殖1个后代
这样思考就能总结出递推公式。
在这里,为了让F(2)=F(1)+F(0)成立(即让n=2时,以上递推公式成立),定义F(0)=0。此外,将第1天的1只动物用F(1)=1表示。整理后可得以下递推公式。
在c语言中此递归函数的实现
int fun(int n)
{
if(n==1||n==2)
{
return 1;
}
else
{
return fun(n-1)+fun(n-2);//要求第n项,就是求n-1项和n-2项的和
}
}
2.摆砖头
现要将1×2大小的砖头摆放成长方形阵列,并规定该长方形的纵长必须为2。假设长方形的横长为n,运用斐波那契数列则砖头的摆法为F(n+1)种。
原因很简单。横长为n的摆法就是以下两项相加之和。
- ·左边竖立放置1块砖头时,右边砖头((n-1)块)的摆法情况数
- ·左边横叠放置2块砖头时,右边砖头((n-2)块)的摆法情况数
这个加法计算,正好就是斐波那契数列的递推公式。
3.创作旋律
假设现在要用4分音符和2分音符打拍子来创作节奏。2分音符的时值等于2个4分音符。即4分音符打2拍的时间只能打1拍2分音符。
若将4分音符打n拍的时间,用4分音符和2分音符来填充,则可以打出F(n+1)种节奏。
原因和前面摆砖头相同。n拍时的情况数,是以下2项情况数相加的结果
- ·先打4分音符,剩余部分为n-1拍时的情况数
- ·先打2分音符,剩余部分为n-2拍时的情况数
4.爬阶梯问题
一段楼梯共n级台阶,每次只能走一级,或两级,问共有多少种走法?
原因和前相同。n阶梯的情况数,是以下2项情况数相加的结果
- ·先走1个台阶,剩余部分为n-1个阶梯时的情况数
- ·先走2个台阶,剩余部分为n-2个阶梯时的情况数
除此之外,在鹦鹉螺的内壁间隔、葵花种子的排法、植物枝叶的长法等问题中,都能看到斐波那契数列的身影。
小帅的总结时刻:
对于一些问题,如果结果是由两种大情况的和,那么就要关注一下是否为类斐波那契数列问题,抓住掌握思考问题的方式,那么这类问题将不再阻挡我们前进的脚步。
最后,如果小伙伴们有更好的想法,请在评论区留言(ps:抱大佬的腿),新手创作,实属不易,如果满意,还请给个免费的赞,三连也不是不可以(流口水幻想),嘿嘿!那我们下期再见喽,拜拜!