首页 未命名正文

linux编程_Python迭代器实现斐波拉契求值

云返利网 未命名 2020-05-26 09:06:13 13 0

  斐波纳契数列以递归的方式界说: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]

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)