基於Python實現斐波那契數列性能
1.使用遞歸 實現斐波那契數列遞歸
#時間複雜度O(2^n)
def fb(n):
assert(n>=0)
if n <= 2:
return 1
return fb(n - 1) + fb(n -2)內存
fb(n) n值最夠大時,會產生內存溢出錯誤,時間開銷和空間開銷比較大,for循環
假設n = 10, f(10) = 55循環
f(10) = f(9) + f(8),遍歷
f(9) = f(7) + f(8),方法
f(8) = f(7) + f(6),時間
f(7) = f(6) + f(5),sse
f(6) = f(5) + f(4),樹形結構
f(5) = f(4) + f(3),
f(4) = f(3) + f(2),
f(3) = f(2) + f(1)
從上述等式能夠看出f(10)---f(1),一分二,二分四的樹形結構,樹的深度爲n,時間複雜度爲O(2^n)
2.使用for循環實現斐波那契數列
#時間複雜度O(n)
def fb1(n):
assert(n>=0)
a,b = 0,1
for i in range(1,n + 1):
a,b = b,a + b
return a
從上述等式能夠看出遍歷n,語句走了n遍,故時間複雜度爲O(N)
遞歸雖然說能夠快速實現斐波那契數列,可是性能不佳,🈚️濫用
從上面兩個方法,看時間複雜度和空間複雜度,方法二優於方法一,故採用方法二