简介
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34
题目的起源
列昂那多·斐波那契于1202年研究兔子产崽问题时发现了此数列。设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡。问:一对兔子一年能繁殖成多少对兔子?
兔子的序列
运用python实现的几种方式
一、迭代的方式实现
#第一种方式
>>> def fab(n):
a = 1
b = 1
c = 1
if n < 1:
return -1
while (n-2) > 0:
c = a + b
a = b
b = c
#另一种表达方式 c, a, b = a+b, b, c
n -=1
return c
>>> print(fab(8))
21
#第二种方式
>>> def fab(n):
a = 1
b = 1
if n < 1:
return -1
while (n-1) > 0:
a,b = b ,a+b
n -=1
return a
>>> print(fab(8))
21
二、递归的方式实现
>>> def fab(n):
if n <1:
return -1
if n==1 or n==2:
return 1
else:
return fab(n-1) + fab(n-2)
>>> print(fab(8))
21
三、迭代器的方法实现
from _collections_abc import Iterable
from _collections_abc import Iterator
class Fibonacci():
def __init__(self,all_num):
self.nums = all_num
self.a = 1
self.b = 1
self.i = 0
def __iter__(self):
return self
def __next__(self):
if self.i < self.nums:
curr = self.a
self.a, self.b = self.b, self.a+self.b
self.i += 1
return curr
else:
raise StopIteration
fab = Fibonacci(10)
all_nums = list()
for n in fab:
all_nums.append(n)
print(all_nums.pop())
all_nums.clear()
>>>55