《趣學演算法》學習筆記(一) 斐波那契
阿新 • • 發佈:2018-11-08
1. 什麼是斐波那契
斐波那契數列:1, 1, 2, 3, 5, 8, 13, 21, 34, …在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
下面寫函式計算第n個數
2. 遞迴方法-效率低
用遞迴,是爆炸增量函式,效率超級低,算第100個數,等好久基本算不出來,寫程式要避免使用遞迴
def f1(n):
if n < 1:
return -1
elif n == 1 or n == 2:
return 1
else :
return f1(n - 1) + f1(n - 2)
3. 演算法改進-使用陣列
使用陣列存放前面計算好的值,效率明顯提高,空間複雜度就是O(n)
def f2(n):
arr = [0 for x in range(n)]
arr[0] = 1
arr[1] = 1
i = 2
while i < n:
arr[i] = arr[i - 1] + arr[i - 2]
i += 1
return arr[n - 1]
4. 演算法改進-使用迭代法
這個改進後空間複雜度為O(1),哈哈還是比較好的
def f3(n):
s1 = 1
s2 = 1
result = 1
i = 3
while i <= n:
result = s1 + s2
s1 = s2
s2 = result
i += 1
return result