(斐波那契数列)Fib数列的几种方法
一、基于类进行实现
class Fib:
def __init__(self):
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 100: # 可自定义截止数
raise StopIteration
return self.a
fib = Fib()
for i in fib:
print(i)
"""
>>>
1
1
2
3
5
……
"""
二、 递归实现
# 递归
def rescuvie (num):
if num == 1:
return 1
else:
return num * rescuvie (num - 1)
# 尾递归
def tail_rescuvie (num, acc=1):
if num == 0:
return acc
else:
return tail_rescuvie (num-1, num * acc)
>>> 普通的线性递归比尾递归更加消耗资源, 在实现上说, 每次重复的过程调用,都使得调用链条不断加长. 系统不得不使用栈进行数据保存和恢复.
>>> 而尾递归就不存在这样的问题, 因为他的状态完全由num和acc保存.
三、 循环
def fib(num):
a, b = 0, 1
for i in range(num):
a, b = b, a+b
print(a)
四、 生成器
#生成器
def fib(num):
a, b = 0, 1
for i in range(num):
a, b = b, a+b
yield a
if __name__ == '__main__':
a = fib(5)
for i in range(5):
print(a.__next__())
日积月累,小小的力量,大大的梦想...

浙公网安备 33010602011771号