Introduction

斐波拉契的启发:

方法一 : 递归做法 这个算法的时间复杂度有着跟Fibonacci类似的递推方程:T(n) = T(n - 1) + T(n - 2) + O(1),很容易得到T(n) = O(1.618 ^ n)(1.618就是黄金分割, 空间复杂度取决于递归的深度,显然是O(n)。

def fibonacci(n):
    if n == 0 or n == 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

方法二: 循环方法:

def fibonacci(n):
    if n== 0 or n == 1:
        return n
    x , y, z = 0, 1, 0
    for i in range(2, n + 1):
        z = x + y
        x = y
        y = z
    return z

方法三:矩阵法,O(logn)

Last updated

Was this helpful?