(斐波那契数列)Fib数列的几种方法

 

一、基于类进行实现

  

class Fib:

    def __init__(self):
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b

        if self.a > 100: # 可自定义截止数
            raise StopIteration

        return self.a

fib = Fib()

for i in fib:
    print(i)
"""
>>>
1
1
2
3
5
……
"""

  

 

二、 递归实现

 

# 递归
def rescuvie (num):

    if num == 1:
        return 1
    else:
        return num * rescuvie (num - 1)



# 尾递归
def tail_rescuvie (num, acc=1):

    if num == 0:
        return acc
    else:
        return tail_rescuvie (num-1, num * acc)

  >>> 普通的线性递归比尾递归更加消耗资源, 在实现上说, 每次重复的过程调用,都使得调用链条不断加长. 系统不得不使用栈进行数据保存和恢复.

  >>> 而尾递归就不存在这样的问题, 因为他的状态完全由num和acc保存.

 

三、 循环

def fib(num):

    a, b = 0, 1
    for i in range(num):
        a, b  = b, a+b
        print(a)

  

四、 生成器

#生成器

def fib(num):
    a, b = 0, 1

    for i in range(num):
        a, b = b, a+b
        yield a

if __name__ == '__main__':

    a  = fib(5)
    for i in range(5):
        print(a.__next__())

  

 

posted @ 2019-06-16 21:36  Harp_Yestar  阅读(370)  评论(0)    收藏  举报