今天在刷题时碰到了斐波那契额数列,然后发现有点忘记了,来记录一下几种实现方式。

递归法

def Fibonacci(i):
    if i <= 1:
        return i
    else:
        return Fibonacci(i-1) + Fibonacci(i-2)
 
if __name__ == "__main__":
    print(Fibonacci(100))

这种方法非常慢,有大量重复计算,复杂度是指数级

递推式

def Fibonacci(i):
   a, b = 0, 1
   for i in range(i):
       a, b = b, a+b
   return a
if __name__ == "__main__":
    for i in range(39):
        print(Fibonacci(i))

该方法复杂度是线性的

生成器

def Fibonacci(n):
   a, b = 0, 1
   while(n>0):
       a, b = b, a+b
       yield a
       n = n - 1
if __name__ == "__main__":
    for i in Fibonacci(10):
        print(i)

暂时记录三种方法。