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

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

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

Читайте также
В TypeScript 5.3 добавили ​​поддержку атрибутов импорта
В TypeScript 5.3 добавили ​​поддержку атрибутов импорта
В TypeScript 5.3 добавили ​​поддержку атрибутов импорта

TS теперь включает одну опцию для определенного редактора, прежде он добавлял модификатор типа, полагаясь на настройки разработчика

Java: новости в октябре
Java: новости в октябре
Java: новости в октябре

Рассказываем о некоторых новостях в октябре в Java, среди них JDK 22, BellSoft, Oracle, GraalVM, Open Liberty.

Что нового в Chrome 118
Что нового в Chrome 118
Что нового в Chrome 118

Кратко рассказываем об обновлениях Chrome.

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

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