加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Python迭代器达成斐波拉契求值

发布时间:2021-11-18 14:14:17 所属栏目:教程 来源:互联网
导读:斐波纳契数列以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n2,nN*)。这个数列从第2项开始,每一项都等于前两项之和,而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618。 用dir(list),dir(tuple),dir(file),dir(dict)

  斐波纳契数列以递归的方法定义: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 Python
 
def 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 55
 
2、递归版本
 
 
 
#!/bin/env python
 
def 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 55
 
3、迭代器版本
 
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]
 
迭代器的使用之地还有很多,例如读取文件等

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读