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

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

Angular V17: главные обновления
Angular V17: главные обновления
Angular V17: главные обновления

Вышло обновление фреймворка Angular V17: увеличение производительности, расширенные возможности, разработка с прицелом на будущее.

Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения
Dev новости: Альтернатива Copilot, Python AI tool, RSC улучшения

Разработчики не идут в крипту, аналог Copilot, AI && Python, Новый Storybook 8 и подборка новостей

Сокращение команд Flutter, Dart и Python в Google
Сокращение команд Flutter, Dart и Python в Google
Сокращение команд Flutter, Dart и Python в Google

Большое сокращение команд по ЯП Flutter, Dart, Python.