斐波那契数列的应用

斐波那契数列(Fibonacci sequence),又称黄金分割数列、兔子数列,是数学家列昂纳多·斐波那契于1202年提出的数列。

斐波那契数列为1、1、2、3、5、8、13、21、34……此数列从第3项开始,每一项都等于前两项之和,递推公式为

F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1。

斐波那契数列是一个递推关系,只要你知道了前两项的值,就可以推出所有项的值。
题目单纯让你写出一个斐波那契数列的话可以说相当简单。

1)输入斐波那契数列的项数,输出对应的值。
python代码

n=int(input())
a=b=1
cnt=2
if n==1 or n==2:
    print(1)
else:
    while cnt<n:
        a,b=b,a+b
        cnt+=1
    print(b)

还可以用定义函数的方式实现,程序的可读性更强。

def f(n):
    if n==0 or n==1:
        return 1
    else:
        return f(n-1)+f(n-2)
n=int(input())
print(f(n))

这里使用递归函数,当项数大于2时,依据是递归公式 f ( n ) = f ( n − 1 ) + f ( n − 2 ) , n > 2 f(n)=f(n-1)+f(n-2),n>2 f(n)=f(n1)+f(n2),n>2

当然使用斐波那契数列十分简单,一般给出的问题,难点在于你是否能判断出它是一个斐波那契数列。下面给出几个简单的例子。
1)使用多米诺(dominos)骨牌——即 1 × 2 1\times2 1×2 的小方格,覆盖 2 × n 2\times n 2×n 的方格棋盘有多少 种不同的方式?
在这里插入图片描述
分析:
• 假设覆盖 2 × n 2\times n 2×n的方格棋盘的不同方式数为 S n S_n Sn
• 考虑覆盖最左上角的小方格,必定是图(a)或(b)的情况
• 在(a)的情况下,继续覆盖完方格棋盘共有 S n − 2 S_{n-2} Sn2 种不同方式
• 在(b)的情况下,继续覆盖完方格棋盘共有 S n − 1 S_{n-1} Sn1种不同方式
• 初值是 S 1 S_1 S1=1, S 2 S_2 S2=2
• 因此 Sn 就是第 n+1 个斐波那契数。
在这里插入图片描述
2) 一个楼梯有 n 级,每次可以 跨上1级或2级,求从楼梯的 最底端登到最顶端的不同的 方法数。

  • 仍然考虑最下面的一个台阶,要走完这级台阶有两种方式。
  • 要么走1级台阶,此时继续走完其他台阶共有 S n − 1 S_{n-1} Sn1种走法。
  • 要么走2级台阶,此时继续走完其他台阶共有 S n − 2 S_{n-2} Sn2种走法。
  • 初值为 S 1 = 1 S_1=1 S1=1, S 2 = 2 S_2=2 S2=2
  • 因此 Sn 就是第 n+1 个斐波那契数。

3)一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对。
不难得到兔子对数就是斐波那契数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cachel wood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值