递归求斐波那契数消除重复

朴素的斐波那契数列时间复杂度是指数级的,会有大量重复运算。

本文算法时间复杂度是线性的

假设斐波那契数列从0开始,也就是:0,1,1,2,3……

def fib(fib1, fib2, n):
    #注意,规定了传参fib1,fib2分别为0和1
    if n == 0:
        return fib1
    elif n == 1:
        return fib2
    else:
        return fib(fib2, fib1+fib2, n-1)


def test():
    for i in range(40):
        print(fib(0,1,i), end=" ")

test()

运行结果

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 6324598

猜你喜欢

转载自blog.csdn.net/liuxiang15/article/details/88823198
今日推荐