天天看点

《趣学算法》学习笔记(一) 斐波那契1. 什么是斐波那契2. 递归方法-效率低3. 算法改进-使用数组4. 算法改进-使用迭代法

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 < :
        return -
    elif n ==  or n == :
        return 
    else:
        return f1(n - ) + f1(n - )
           

3. 算法改进-使用数组

使用数组存放前面计算好的值,效率明显提高,空间复杂度就是O(n)

def f2(n):
    arr = [ for x in range(n)]
    arr[] = 
    arr[] = 
    i = 
    while i < n:
        arr[i] = arr[i - ] + arr[i - ]
        i += 
    return arr[n - ]
           

4. 算法改进-使用迭代法

这个改进后空间复杂度为O(1),哈哈还是比较好的

def f3(n):
    s1 = 
    s2 = 
    result = 
    i = 
    while i <= n:
        result = s1 + s2
        s1 = s2
        s2 = result
        i += 
    return result
           

继续阅读