This is an old revision of the document!
Memoization is a common optimization technique where repeatedly computed values are cached for quick lookup. While memoization can be achieved by a relatively simple modification to many recursive formulations, Python3's functools library implements automatic memoization in the form of an LRU (least recently used) cache as a function decorator.
The Fibonacci sequence (fn = fn-1+fn-2) is a canonical example of a naive recursive function with exponential complexity.
def fib(n): if n < 2: return 1 return fib(n-1) + fib(n-2) print(fib(40))
from functools import * @lru_cache(maxsize=None) def fib(n): if n < 1: return n return fib(n-1) + fib(n-2) print(fib(300))
n | fibonacci.py | fibonacci_lru.py |
---|---|---|
10 | .016s | .0224s |
20 | .0216s | .0232s |
30 | .4664s | .0216s |
40 | - | .0248s |
50 | - | .024s |
… | … | …. |
100 | - | .0192s |
200 | - | .024s |
300 | - | .0232s |