斐波那契数列(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(n−1)+f(n−2),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}
Sn−2 种不同方式
• 在(b)的情况下,继续覆盖完方格棋盘共有
S
n
−
1
S_{n-1}
Sn−1种不同方式
• 初值是
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} Sn−1种走法。
- 要么走2级台阶,此时继续走完其他台阶共有 S n − 2 S_{n-2} Sn−2种走法。
- 初值为 S 1 = 1 S_1=1 S1=1, S 2 = 2 S_2=2 S2=2
- 因此 Sn 就是第 n+1 个斐波那契数。
3)一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对。
不难得到兔子对数就是斐波那契数。