fib

空间复杂度

  • 如果代码开了数组,则为数组长度
  • 如果有递归,则为递归深度
  • 如果有数组有递归,取最大值

递归:

fib

 

 

def fib(n):
    """ 递归:时间复杂度O(2**n),空间复杂度O(N),树的高度"""
    if n < 3:
        return 1
    else:
        return  fib(n - 1) + fib(n - 2)

 

优化时间复杂度后写法:

def fib2(n):
    """ 循环:时间复杂度O(N),空间复杂度O(1)"""
    a,b =0,1
    for x in  range(n):
        a,b = b,a+b
    return b

def fib_while(n):
    """ 循环:T=O(N),S=O(1)"""
    a,b=0,1
    i=1
    while i<=n :
         print(b,end=" ")
         i =i+1
         a,b =b,a+b
if __name__ == '__main__':

for i in range(0,15):
print(fib2(i),end=',')
print("\n=============")

fib_while(15)

结果如下:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,
=============
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
Process finished with exit code 0

  

总结:

最坏:时间复杂度O(2^n),空间复杂度O(N)

最好:时间复杂度O(N),空间复杂度O(1)

 

上一篇:【LeetCode】509. 斐波那契数


下一篇:go学习笔记-函数