Memoization (记忆化)是一种利用缓存来加速函数调用的技术手段,将消耗较大的调用结果存储起来,当再次遇到相同调用时就从缓存读取结果而无需重新计算,这种方法叫做LRU(Least Recently Used)缓存算法
例如,递归实现的fabonacci数列,若不能Memoization技术,当n大于25时,可以明显感受到运行速度的变慢,如下图所示。
为了解决这个问题,Python提供一个内置函数缓存装饰器
@functools.lru_cache(maxsize=128, typed=False),maxsize 参数是指最大缓存多少个调用,如果赋值为 None 则是无限制缓存,且关闭 LRU 功能。typed 参数控制函数参数类型不同时是否单独缓存。设置为True时, 例如f(3)和f(3.0)将会区别对待
现借助lru_cache优化递归函数调用速度:
Memoization (记忆化)Fabonacci数列有一个很有意思的特性,就是当前项与前一项的商,是黄金比例(Gold Ratio), 1.618, 1/1.618 = 0.618
Gold Ratio(黄金比例)
网友评论