Мемоизация и каррирование
Мемоизация (memoization) - это способ оптимизации при котором сохраняется результат выполнения функции и этот результат используется при следующем вызове. Берем рекурсивную реализацию нахождения числа Фибоначчи и смотрим время выполнения @clock def fib (n): if n < 2 : return n return fib(n - 2 ) + fib(n - 1 ) print ( 'fib(20) =' , fib( 20 )) [0.35938287s] fib(20) -> 6765 Время работы будет очень быстро расти при увеличении числа которое нужно найти, плюс возможна ошибка RecursionError. Для оптимизации подобного алгоритма хорошо подходит метод мемоизации, то есть сохранение и повторное использования ранние вычисленных значений. _fib_cache = { 1 : 1 , 2 : 1 } @clock def mem_fib (n): result = _fib_cache . get(n) if result is None : result = mem_fib(n - 2 ) + mem_fib(n - 1 ) _fib_cache[n] = result return result print ( 'mem_fib(200) =' , mem_fib( 200 )) [0.03125453s] mem_fib(200) -&g