首先想到的是用递归来解决
求100内的斐波那契数列:
def diGui(num=100):
a,b = 0,1
# 为了方便看打印,我就用list存一下
lit = []
while a < num:
# print(a)
lit.append(a)
a, b = b,a+b
print(lit)
diGui()
# 打印输出为
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
# 求1000内的
diGui(1000)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
递归是比较容易解决,但是这个对内存很不友好,要是后面求10000,100000,甚至更大的呢!
所以就想到可以用python的生成器,如果一个函数中有yield关键字,那他就是一个生成器(generator).
import sys
# 这里其实和上面的递归写法很类似,只需要把print(a)换成yeild就行
def generator(num=100):
a,b = 0,1
while a < num:
# print(a)
yield a
a, b = b,a+b
# 注意:这里的g是一个生成器对象
g = generator()
print(type(g))
# 然后我调用next()方法取值
while True:
print(next(g))<