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

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

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

Читайте также
Dev новости: утверждение спецификаций ECMAScript 2024 и использование WasmGC в Google Sheets
Dev новости: утверждение спецификаций ECMAScript 2024 и использование WasmGC в Google Sheets
Dev новости: утверждение спецификаций ECMAScript 2024 и использование WasmGC в Google Sheets

Утверждена спецификация EMCAScript 2024, wasmGC в GoogleSheets и новые возможности для разработчиков в Shopify

Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro
Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro
Dev новости: Deno Decorates, предварительный рендеринг в Nuxt, Astro

Прогресс у Deno с JS && TS. релизы Astro и другие новости

Ретроспектива Vue 3
Ретроспектива Vue 3
Ретроспектива Vue 3

В этом тексте вспомним, что было выходило нового во Vue 3 при минорных обновлениях.

Вышел Spin 2.0 — обновление фреймворка Fermyon для создания приложений на WebAssembly
Вышел Spin 2.0 — обновление фреймворка Fermyon для создания приложений на WebAssembly
Вышел Spin 2.0 — обновление фреймворка Fermyon для создания приложений на WebAssembly

Фреймворк предназначен для облачных вычислений, которые собирают приложения из Wasm-компонентов, написанных на разных языках программирования. Spin 2.0 формирует базу для смены режимов между выполнением и реализацией.