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

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

Расширение C# Dev Kit включает в себя основные сервисы языка C#, помощь IntelliCode, возможности тестирования, отладки и управления проектами. Поддержка .NET MAUI и Unity сейчас находится в стадии предварительного просмотра.

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

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

Стандартизация сигналов в JavaScript
Стандартизация сигналов в JavaScript
Стандартизация сигналов в JavaScript

Подобно Промисам которые прошли стандартизацию Promises TC39 в ES2015 зарождается новый стандарт для управление реактивностью с помощью Signals.

Dev новости: Deno выступает против Oracle, Vite 6
Dev новости: Deno выступает против Oracle, Vite 6
Dev новости: Deno выступает против Oracle, Vite 6

Сообщество разработки взволновано неожиданной новостью: Deno, известная среда выполнения для JavaScript и TypeScript, инициировала петицию в Бюро патентов и торговых марок США (USPTO) с требованием аннулировать право Oracle на торговую марку JavaScript. Об этом заявил создатель Deno и Node.js Райан Даль в понедельник.