实现斐波拉契的三种方法

实现斐波拉契的三种方法:
方法一:递归方法

def fib_1(index):
    if index <= 2:
        return 1
    else:
        return fib_1(index-1) + fib_1(index-2)


if __name__ == "__main__":
    print(fib_1(10))

结果如下:

55

方法二:遍历

def fib_2(index):
    re_list = []
    n, a, b = 0, 0, 1
    while n < index:
        re_list.append(b)
        a, b = b, a+b
        n +=1
    return re_list


if __name__ == "__main__":
    print(fib_2(10))

结果如下:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

方法三:生成器

def fib_3(index):
    n, a, b = 0, 0, 1
    while n < index:
        yield b
        a, b = b, a+b
        n += 1


if __name__ == "__main__":
    for item in fib_3(10):
        print(item, end=" ")

结果如下:

1 1 2 3 5 8 13 21 34 55 

性能分析:
性能从高到底:fib_3 , fib_2, fib_1

fib_1改进版

def decorate(func):
    cache = {}  # 缓存

    @functools.wraps(func)
    def wrap(*args):
        res = cache.get(args)
        if not res:
            res = cache[args] = func(*args)
        return res
    return wrap

@decorate
def fib_1(index):
    if index <=2:
        return 1
    return fib_1(index - 1) + fib_1(index - 2)

#性能分析

 if __name__ == '__main__':
    t_1 = timeit.timeit(stmt="fib_1(100)", setup="from  __main__ import fib_1", number=100)
    t_2 = timeit.timeit(stmt="fib_2(100)", setup="from  __main__ import fib_2", number=100)
    t_3 = timeit.timeit(stmt="fib_3(100)", setup="from  __main__ import fib_3", number=100)
    print(t_1)  # 打印执行
    print(t_2)  # 打印执行
    print(t_3)  # 打印执行

结果:

0.00027622655034065247
0.001580890268087387
2.839416265487671e-05

性能分析:
性能从高到底:fib_3 , fib_1, fib_2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值