斐波那契数列公式如下:
F(1)=1, n =1
F(2)=1, n =2
F(n)=F(n-1)+F(n-2)(n>=2,n∈N*),n为正整数
几种实现方法(python3实现)
1.递归法
'''
1,递归法
'''
def fib_recur(n):
assert n >0,'n应该>0'
if n == 1 or n == 2:
return 1
return(fib_recur(n-1) + fib_recur(n-2))
# test 输出前15个数
for i in range(1,16):
print(fib_recur(i))
'''
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
'''
特点:写法最简洁,但是效率最低,会出现大量的重复计算,事件复杂度O(1.618^n),而且最深度1000
2.递推法
'''
2.递推法
'''
def fib_loop(n):
assert n > 0,'n应该>0'
a, b = 0, 1
for i in range(n):
a,b = b,a+b # a=b,b=a+b,相当于temp=b,b=a+b,a=temp
return a
# 输出前15个数
for i in range(1,16):
print(fib_loop(i))
'''
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
'''
特点:时间复杂度为O(n),数据量很大时,速度会越拖越慢
3.生成器
'''
3.生成器
'''
def fib_loop_while(num):
a, b= 0, 1
while num > 0:
a, b = b,a+b
num -= 1
#print(a)
yield a
#for i in fib_loop_while(15):
# print(i)
# 或者用下面方法,next15次
c = fib_loop_while(15) # 定义生成器对象
for i in range(15):
print(c.__next__()) #python对应的为__next__,python2对应的为next方法
'''
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
'''
特点:带有yield的函数称为生成器,生成器为可迭代对象,且有__iter__和__next__方法,可遍历元素,优点是适用于大数据量情况下,效率依然不会降低
参考资料: