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

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

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

Читайте также
Microsoft: язык сценариев VBScript устарел
Microsoft: язык сценариев VBScript устарел
Microsoft: язык сценариев VBScript устарел

Microsoft предупреждает, что через некоторое время VBScript будет полностью удалён из новых версий Windows. Сейчас компания оставляет язык, как опцию, чтобы у разработчиков было время для миграции своих систем.

Google выпустила расширение для Chrome JSON Editor 1.0
Google выпустила расширение для Chrome JSON Editor 1.0
Google выпустила расширение для Chrome JSON Editor 1.0

Оно позволяет оптимизировать управление данными JSON, упростить процесс редактирования, визуализации и проверки файлов прямо в браузере.

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

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

Dev новости: Реакции разработчиков на изменения в React 19 и Рост популярности векторных БД
Dev новости: Реакции разработчиков на изменения в React 19 и Рост популярности векторных БД
Dev новости: Реакции разработчиков на изменения в React 19 и Рост популярности векторных БД

На прошлой неделе разработчики React столкнулись с потенциальной проблемой, связанной с новым обновлением React 19, которое могло замедлить работу существующих сайтов, построенных на этой платформе. Юджи из Code Miner объяснил, что проблема связана с компонентом Suspense и его обработкой в React 19 по сравнению с React 18.