python3:
# 递归函数
# 返回一个值
def fib(n):
if n == 1:
return 0
elif n == 2:
return 1
else:
return fib(n-2) + fib(n-1)
# 生成器函数
# 返回一个生成器对象
def fib2(n):
a,b = 0,1
for i in range(n):
yield a
a,b =b,a+b
# 迭代类
class Fibs():
def __init__(self,max):
self.a = 0
self.b = 1
self.max = max
def __iter__(self):
return self
def __next__(self):
fib = self.a
self.a,self.b = self.b,self.a + self.b
if fib > self.max:
raise StopIteration
return fib
if __name__ == '__main__':
print("递归")
tmp = []
for i in range(1, 11):
tmp.append(fib(i))
print(tmp)
print("\n生成器")
print(list(fib2(10)))
print("\n迭代类")
fibsobj = Fibs(1000)
print(list(fibsobj))
输出结果:
递归
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
生成器
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
迭代类
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
网友评论