首页 / 操作系统 / Linux / Python迭代器实现斐波拉契求值
斐波纳契数列以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。这个数列从第2项开始,每一项都等于前两项之和,而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618。 用dir(list),dir(tuple),dir(file),dir(dict)来查看不同类型对象的属性,会发现它们都有一个名为__iter__的特殊方法,对象有它,就能通过该方法返回迭代器,所谓的迭代器就是具有next()方法的对象,在调用next()方法时,迭代器会返回它的下一个值。如果next()方法没有被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。如果列表太大,使用列表会占用太多的内存,这时候就需要的是迭代对象。 下面是使用不同方法实现斐波拉契求值1、简单版本#!/bin/env pythondef fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a
print "f5", fib(5)
print "f10", fib(10)运行结果f5 5
f10 552、递归版本 #!/bin/env pythondef fib(n):
if 0 == n:
return 0
elif 1 == n:
return 1
else:
return fib(n-1) + fib(n-2)print "f5", fib(5)
print "f10", fib(10)运行结果f5 5
f10 553、迭代器版本class Fib():
def __init__(self, n):
self.a = 0
self.b = 1
self.n = n
self.count = 0
def __iter__(self):
return self
def next(self):
res = self.a
self.a, self.b = self.b, self.a + self.b
if self.count > self.n:
raise StopIteration
self.count += 1
return res
print "f5", list(Fib(5))
print "f10", list(Fib(10))运行结果f5 [0, 1, 1, 2, 3, 5]
f10 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]迭代器的使用之地还有很多,例如读取文件等本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136897.htm