美文网首页
python3 多种方式计算斐波那契数列

python3 多种方式计算斐波那契数列

作者: 余带盐 | 来源:发表于2018-08-22 14:52 被阅读0次
    def fibonacci1(n: int) -> []:
       """
       这个是使用 a,b=b,a 的技术求斐波那契数列
       :param n: n是斐波那契数列的序号
       :return: 以key为序号,以val为值的斐波那契数列的字典
       """
       while n < 1:
           n = int(input("请输入正整数:"))
       dict1 = {}
    
       if n == 1:
           dict1[0] = 1
       else:
           a = 0
           b = 1
           for i in range(1, n + 1):
               dict1[i] = b
               a, b = b, a + b
    
       print(dict1.values())
       return dict1
    
    
    def fibonacci2(n: int, dict1: {} = {}) -> {}:
       """
       通过迭代+闭包的方式求斐波那契数列
       :param n: 序号
       :param dict1: 使用这个可以在多次斐波那契数列的计算中节省次数,要么不填,要么默认为{}
       :return:  以key为序号,以val为值的斐波那契数列的字典
       """
    
       # 下面这句代码是根据把空dict1生成 {0: 0, 1: 1}
       if len(dict1) < 2:
           dict1.clear()
           dict1[0] = 0
           dict1[1] = 1
    
       while n < 1:
           n = int(input("请输入正整数:"))
    
       def fibonacci2_sub(m: int) -> int:
           """
           通过迭代的方式求斐波那契数列,dict1节省了计算次数
           :param m:m是序号
           :return:返回的是序号为m的斐波那契数列的值
           """
    
           if m not in dict1:
               dict1[m] = fibonacci2_sub(m - 1) + fibonacci2_sub(m - 2)
    
           return dict1[m]
    
       fibonacci2_sub(n)
       print(dict1.values())
       return dict1
    
    
    if __name__ == "__main__":
       fibonacci1(12)
       ff = {}
       fibonacci2(12, ff)
       fibonacci2(13, ff)
    
    1. 使用生成器
    def fibonacci3(n: int) -> {}:
       def fibonacci3_sub(m: int):
           """
           这个是通过生成器求斐波那契数列
           :param m: 序号
           :return: None
           """
           if m < 2:
               pass
           else:
               a = 1
               b = 1
               for i in range(1, m + 1):
                   yield a
                   b, a = a + b, b
    
       iter1 = fibonacci3_sub(n)
    
       dict1 = dict()
    
       for index, val in enumerate(iter1):
           dict1[index + 1] = val
    
       return dict1
    
    
    if __name__ == "__main__":
       print(fibonacci3(12))
    

    相关文章

      网友评论

          本文标题:python3 多种方式计算斐波那契数列

          本文链接:https://www.haomeiwen.com/subject/zeueiftx.html