zoukankan      html  css  js  c++  java
  • python 斐波那契数列

    1.递归法

    #!/usr/bin/python3
    #coding=utf-8

    def fib_recur(n):
    assert n >= 0, "n > 0"
    if n <= 1:
    return n
    return fib_recur(n-1) + fib_recur(n-2)

    for i in range(1, 20):
    print(i)
    print(fib_recur(i), end=' ')

    写法最简洁,但是效率最低,会出现大量的重复计算,时间复杂度O(1.618^n),而且最深度1000

    2.递推法
    #!/usr/bin/python3
    #coding=utf-8

    def fib_loop(n):
    a, b = 0, 1
    for i in range(n + 1):
    a, b = b, a + b
    return a


    for i in range(20):
    print(fib_loop(i), end=' ')
    递推法,就是递增法,时间复杂度是 O(n),呈线性增长,如果数据量巨大,速度会越拖越慢

    3.
    def fib_loop_while(max):
        a, b = 0, 1
        while max > 0:
            a, b = b, a + b
            max -= 1
            yield a
    
    
    for i in fib_loop_while(10):
        print(i)

    带有yield的函数都被看成生成器,生成器是可迭代对象,且具备__iter__ 和 __next__方法, 可以遍历获取元素
    python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现__iter__方法,而__iter__方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的__iter__方法返回自身即可

  • 相关阅读:
    sql
    vs 2010创建Windows服务定时timer程序
    C#(.net)实现用apache activemq传递SQLite的数据
    ASP.net与SQLite数据库通过js和ashx交互(连接和操作)
    Object
    Thread
    多线程知识
    HTTPS详解
    TCP协议
    [BJDCTF 2nd]假猪套天下第一 && [BJDCTF2020]Easy MD5
  • 原文地址:https://www.cnblogs.com/wangyh702/p/11578885.html
Copyright © 2011-2022 走看看