1. 程式人生 > >《趣學演算法》學習筆記(一) 斐波那契

《趣學演算法》學習筆記(一) 斐波那契

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