其他分享
首页 > 其他分享> > 斐波那契数列

斐波那契数列

作者:互联网

为何什么用字典保存计算结果而不是列表?

使用字典的优势:

  1. 不必像使用列表一样提前分配内存
  2. 在字典中存入0,1对应的斐波那契数之后不必对0,1特殊处理
  3. 某个数是否算过的判断方式比列表更优雅
点击查看代码
class Solution:
    def fib_help(self, n, nb):
        if n < 2:
            return n

        # 如果n已经计算过了,那么直接返回
        if nb[n] != 0:
            return nb[n]
        else:
            # 判断n-1, n-2是否需要重新计算
            if nb[n-1] == 0:
                nb[n-1] = Solution.fib_help(self, n-1, nb)
            elif nb[n-2] == 0:
                nb[n-2] = Solution.fib_help(self, n-2, nb)
        return  nb[n-1] + nb[n-2]

    def fib(self, n: int) -> int:
        # 提前分配为列表分配内存
        # 希望给一个n,能求出对应的斐波那契数
        # 斐波那契数从0开始,所以要存n+1个数
        nb = [0] * (n+1)
        return Solution.fib_help(self, n, nb)
点击查看代码
    def fib_help(self, n, nb = {0: 0, 1: 1}):
        if n in nb:  
            return nb[n]
        else:
            if n-1 not in nb:
                nb[n-1] = Solution.fib_help(self, n-1, nb)
            elif n-2 not in nb:
                nb[n-2] = Solution.fib_help(self, n-2, nb)

        return  nb[n-1] + nb[n-2]
    def fib(self, n: int) -> int:
        return Solution.fib_help(self, n)

标签:fib,return,数列,self,Solution,斐波,那契,nb,help
来源: https://www.cnblogs.com/Yuetao-Meng/p/16455762.html