数论-Fibonacci数列

先来考虑一个简单的问题,楼梯有n个台阶,上楼可以一步上一阶,也可以一步上两阶,一共有多少种上楼的方法?

这是一道计数问题。在没有思路时,不妨试着找规律。n=5时,一共有8种方法。

5=1+1+1+1+1

5=2+1+1+1

5=1+2+1+1

5=1+1+2+1

5=1+1+1+2

5=2+2+1

5=2+1+2

5=1+2+2

其中有5种方法第1步走了1阶,3种方法第1步走了2阶。没有其他可能了。假设f(n)为n个台阶的走法总数。把n个台阶的走法分成两类。

第1类:第一步走1阶,剩下还有n-1阶要走,有f(n-1)种方法。

第2类:第一步走2阶,剩下还有n-2阶要走,有f(n-2)种方法。

这样,就得到了递推式:f(n)=f(n-1) + f(n-2)。不要忘记比边界情况:f(1)=1,f(2)=2,当然,也可以认为边界是f(0)=f(1)=1.把f(n)的前几项列出,1,1,2,3,5,8,...

再例如,把雌雄各一的一对新兔子放入养殖场中。每只雌兔从第2个月开始每月产雌雄各一的一对新兔子。试问第n个月后养殖场中共有多少对兔子?

还是先找找规律。

第1个月:一对新兔子r1,用小写字母表示新兔子。

第2个月:还是一对新兔子,不过已经长大,具备生育能力了,用大写字母R1表示。

第3个月:R1生了一对新兔子r2,一共两对。

第4个月,R1又生了一对r3,一共3对,另外,r2长大了,变成R2.

第5个月,R1和R2各生一对,记为r4和r5,共5对。此外,r3长成R3.

第6个月,R1、R2和R3各生一对,记为r6-r8,共8对,同时r4到r5长大。

.....

把这些数排列起来,1,1,2,3,5,8,....和刚才的一模一样!事实上,可以直接推导出递推关系f(n) = f(n-1) + f(n-2);第n个月的兔子由两部分组成,一部分是上个月就有的兔子,一部分是上一个月有生育能力的兔子。前一部分等于f(n-1),后一部分等于f(n-2)(第n-1个月时具有生育能力的兔子数就等于第n-2个月的兔子总数)。根据加法原理,f(n) = f(n-1) + f(n-2)。

满足F1=F2=1, Fn=Fn-1+Fn-2的数列称为Fibonacci数列,它的前若干项是1,1,2,3,5,8,13,21,34,55,......

你可能感兴趣的:(算法)