Python小达人
Python课程记录在此!我从基础开始学,基本功很扎实~

用 Python来实现斐波纳契数列

有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后
每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
首先我们要明白题目的意思指的是每个月的兔子总对数;假设将兔子分为小中大
三种,兔子从出生后三个月后每个月就会生出一对兔子,
那么我们假定第一个月的兔子为小兔子,第二个月为中兔子,第三个月之后就为
大兔子,那么就有以下规律:
第一个月: 小 1、中 0、大 0,
第二个月:小 0、中 1、大 0,
第三个月:小 1、中 0、大 1,大兔子可以生一对小兔子
第四个月:小 1、中 1、大 1,
第五个月:小 2、中 1、大 2,有两对大兔子可以生两对小兔子
第六个月:小 3、中 2、大 3,
第七个月:小 5、中 3、大 5……
计算一下: 兔子总数分别为:1、1、2、3、5、8、13……
2 = 1+1, 3 = 1+2, 5 = 2+3, 8 = 3+5, 13 = 5+8
于是得出了一个规律,从第三个月起,后面的兔子总数都等于前面两个月的兔子
总数之和,即为斐波那契数列。
所以这道题最终是需要我们来打印斐波那契数列。
打印斐波那契数列有非递归和递归两种思路,我们分别用这两种思路来实现 12
个月的兔子对数
非递归方式:

a, b = 0, 1
for i in range(1, 13):
    print('第%s个月:%s只兔子' % (i,b))
    a, b = b, a+b

递归方式

# 斐波那契数列,也称兔子数列,是指1,1,2,3,5,8,13,21,34,55,89,144......这样一个数列,
# 在这个数列当中,从第三项起,每一项都是前两项数字之和。
def Fib(n):
    return 1 if n<=2 else Fib(n-1)+Fib(n-2)
 
print(Fib(int(input('递归实现打印斐波那契数列第N项:'))))

 

发表评论

您的电子邮箱地址不会被公开。