首页 > temp > python入门教程 >
-
python基础(补充):关于递归的优化(使用缓存)
在上一节中,我们一起探讨了递归的深度
递归深度有了底,你可以大胆使用递归了,然而问题又来了,python的递归和蜗牛一样慢,那么有没有优化的余地呢?因为我也是菜鸟,所以简单提供几种优化方案供大家学习交流。
1|0优化思路
第一角度优化算法,根据递归的计算过程计算过程中实例化了大量重复的函数计算,第一角度尝试优化计算逻辑,但是怎么优化算法说实话心里没谱。
既然优化算法没法实现,那么我们分析一下耗时的原因,其实在递归过程中自身调用自身不断实例化自身,计算机堆内存溢出导致递归有深度一次,在运算结果时候也是不断去计算每个实例化返回值,是否可以将计算过程中实例化返回值保存在一个缓存中或者一个IO中,计算结果时候每次从缓存或者IO中读取是不是能简化计算量从而提高效率呢?尝试去寻找一下缓存解决方案。找到了以下几种缓存优化方案,下面来共同学习下:
我们还是以斐波那契函数为例,先来看一下没有使用缓存的斐波那契数列:
2|0优化方案一:使用计算缓存
3|0方案二:使用functools 中装饰器
4|0方案三:使用github上的cache方案
chahe.py
代码
5|0方案四:使用diskcache专业的缓存方案
以上就是四种递归缓存方案,通过运行时间对比采取合适的优化方案即可,至于没有使用缓存方案的递归——好伤,好伤,好伤。所以如果有非常多层次递归深度,而且计算次数还非常多,奉劝一句或者使用缓存,或者放弃python的递归,要不那就是在玩火!!!
6|0运算结果的对比
你可能会说:斐波那契数列递归深度100,运行1000次平均时间感觉说起来就没意思。
记住一句不要玩火就好!!!
至于本次的测试环境:python 3.6.8 其他版本的python环境可能会有一捏捏的差别,感兴趣的小伙伴可以自行测试一下。
个人感觉(不喜勿喷,狗头保命):functools中装饰器的方案还是不错的
__EOF__
作 者:pure3417 出 处:https://www.cnblogs.com/pure3417/p/14675122.html