斐波那契数列的形式是后一位数是前两位数之和,以此类推,如:1 2 3 5 8 13 21 34 55 .....
方法一:迭代
def fibonacci_1(n, a=0, b=1):
"""
:param n: 迭代次数,即数列长度
:param a: 起始位1
:param b: 起始位2
:return:
"""
l = []
for i in range(n):
l.append(a)
a, b = b, a+b
return l
print(fibonacci_1(10, a=2, b=3))
方法二:生成器
def fibonacci_3(n, a=0, b=1):
"""
:param n: 数列长度
:param a: 起始位1
:param b: 起始位2
:return:
"""
i = 0
while i < n:
yield a
a, b = b, a+b
i += 1
这里返回的是一个生成器,用for循环取值
print([i for i in fibonacci_3(10)])
方法三:递归
def fibonacci_4(n, a, b):
"""
:param n: 数列长度
:param a: 起始位1
:param b: 起始位2
:return:
"""
if n == 0:
return a
elif n == 1:
return b
return fibonacci_4(n-1, a, b)+fibonacci_4(n-2, a, b)
f = lambda x, a, b: [fibonacci_4(i, a, b) for i in range(x)]
print(f(10, 10, 10))
方法四:类迭代器
class Fibonacci:
"""
:param n: 数列长度
:param x: 1、2位初始差值
:param a: 起始位
:return:
"""
def __init__(self, n, x, a):
self.n = n
self.x = x
self.a = a
def __iter__(self):
return self
def __next__(self):
if self.n == 0:
exit()
else:
self.n -= 1
self.x, self.a = self.a, self.x+self.a
return self.x
f1 = Fibonacci(10, 1, 0)
for i in f1:
print(i)