Мемоизация в программировании

Мемоизация — это обычное кеширование для функций и оптимизации каких-нибудь вычислений или других операций. Является частью так называемого «динамического программирования». Рассмотрим абстрактный пример с рекурсивной фибоначи на 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);
}

Мемоизация может быть и без рекурсии, и вполне в реальных задачах — где здесь и сейчас надо кешировать информацию.

Читайте также
Рассказываем об обновлениях Firefox 119
Рассказываем об обновлениях Firefox 119
Рассказываем об обновлениях Firefox 119

В октябре вышли обновления Firefox 119. Также сформировали обновление ветки с длительным сроком поддержки — 115.4.0.

Что значат стабильные версии Firefox 119, Safari 17.1, Chrome 118 и Chrome 119 для веб-платформы
Что значат стабильные версии Firefox 119, Safari 17.1, Chrome 118 и Chrome 119 для веб-платформы
Что значат стабильные версии Firefox 119, Safari 17.1, Chrome 118 и Chrome 119 для веб-платформы

Браузеры Firefox 119, Safari 17.1, Chrome 118 и Chrome 119 стали стабильными. В этом обзоре рассказываем, что это значит для веб-платформы.

Google переименовал чат бота Bard в Gemini
Google переименовал чат бота Bard в Gemini
Google переименовал чат бота Bard в Gemini

Новый формат взаимодействия с AI чатами от Google

Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов
Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов
Игра «Нейрогород» на знание JavaScript и исправление фронтендерских багов

Задача игры — устранить все баги, особенно присматриваться к любым странным и необычным явлениям во внешнем облике города.