斐波那契数列
0,1,1,2,3,5,8,13,21,34 ….
前两个数相加,是第三个数的值
假如我需要一亿甚至十亿个数,如果使用range()生成,使用一个list() 储存。我们使用迭代器设置好生成的方法,什么使用我们什么时候生成,这样可以节约内存
斐波那契数列案例
需要一个列表存储生成的数字
maxCount = 100000 # 需要生成的个数
count = 0 # 记录生成的次数
startOne = 0 # 斐波那契数列第一个起始值
startTwo = 1 # 斐波那契数列第二个起始值
fibonacciList = list()
while count < maxCount:
fibonacciList.append(startOne)
startOne, startTwo = startTwo, startOne + startTwo
count += 1
for num in fibonacciList:
print(num)
加入迭代器
这个过程没有一个列表
class Fibonacci(object):
def __init__(self, allNum):
self.allNum = allNum # 需要生成的个数
self.count = 0 # 记录生成的次数
self.startOne = 0 # 斐波那契数列第一个起始值
self.startTwo = 1 # 斐波那契数列第二个起始值
def __iter__(self):
return self
def __next__(self):
if self.count < self.allNum:
# 记录斐波那契数
fiboNum = self.startOne
# 计算斐波那契数
self.startOne , self.startTwo = self.startTwo , self.startOne + self.startTwo
# 生成次数
self.count += 1
return fiboNum
else:
# 自定义一个异常 停止循环
raise StopIteration
# 传入生成个数
fibo = Fibonacci(10000)
# 一个对象 可以使用 for 循环
for num in fibo:
print(num)