k输入30就很慢了,100直接死机

来源:2-2 递归实现斐波拉契数列

慕粉2011219583

2020-02-26 15:27

递归性能是不是很低?

写回答 关注

2回答

  • 木子小7
    2020-03-03 15:52:21
    已采纳

    递归的性能是很低,因为会有大量重复计算的过程。但是可以提高性能。你把已经递归的值存放到字典里,需要用时取之。这样你输入1000都不会死机。

    from collections import defaultdict
    total_dic = defaultdict(int)
    
    def fib(k):
        if k in [1, 2]:
            return 1
        if k in total_dic:
            result = total_dic[k]
        else:
            result = fib(k-1) + fib(k-2)
            total_dic[k] = result
        return result
            
    print(fib(1000))


  • 慕仙3551870
    2020-11-11 09:20:22

    楼上回答的无非是增加了一个缓存,那为什么不用Python自带的缓存来实现呢,functool.lru_cache,代码不需要任何变动,仅仅加一个装饰器即可

Python 算法面试难点攻坚课--动态规划

动态规划和递归作为算法中面试频率很高,是我们这门课程重点攻克对象。

3704 学习 · 11 问题

查看课程

相似问题