Мемоизация — это обычное кеширование для функций и оптимизации каких-нибудь вычислений или других операций. Является частью так называемого «динамического программирования». Рассмотрим абстрактный пример с рекурсивной фибоначи на javascript:
// Обычный пример без мемоизации
function fibonacci(n) {
if (n <= 1) {
return 1;
}
a = fibonacci(n - 1);
b = fibonacci(n - 2);
return a + b;
}
// С мемоизацией
function fibonacciMemo(element, memo = {}) {
if (element < 3) return 1;
if (element in memo) return memo[element];
memo[element] = fibonacciMemo(element - 1, memo) + fibonacciMemo(element - 2, memo);
return memo[element];
}
// С замыканием переменной для мемоизации
function fibonacciMemo(n) {
const memorize = {};
function fibonacci(n) {
if (n in memorize) return memorize[n];
if (n < 3) return 1;
return memorize[n] = fibonacci(n - 1) + fibonacci(n - 2);
}
return fibonacci(n);
}
Мемоизация может быть и без рекурсии, и вполне в реальных задачах — где здесь и сейчас надо кешировать информацию.