# Memoization cache: o que é e como otimizar funções

> Memoization cache é uma técnica de otimização que armazena resultados de funções em memória para reutilização em chamadas subsequentes com os mesmos argumentos. A aplicação prática reduz custo computacional em funções puras e recursivas, como cálculos de Fibonacci ou processamento de dados repetitivos. Memoization compensa quando há alta repetição de entradas e baixa variação de parâmetros, mas exige cuidado com consumo de memória.

*TNT Web · Apps e Software · 01 de setembro de 2026 · Eloá Pimentel*

Memoization cache é uma técnica que armazena resultados de funções para evitar recálculos. Veja como aplicá-la na prática e quando ela realmente compensa.

Memoization cache é uma técnica de otimização que faz uma função lembrar os resultados de chamadas anteriores. Em vez de recalcular tudo do zero, a função consulta um armazenamento interno e, se o resultado para aqueles argumentos já existe, devolve imediatamente. O ganho é maior quando a mesma função é chamada muitas vezes com os mesmos parâmetros, como em recursões de Fibonacci ou em processamento de dados repetitivos.

A ideia central é simples: trocar tempo de processamento por espaço de memória. Cada resultado fica guardado em uma estrutura de dados, geralmente um objeto ou mapa, associado aos argumentos da chamada. Na próxima invocação, a função verifica se a chave já existe. Se existe, retorna o valor salvo. Se não, calcula, armazena e retorna.

## O que é memoization cache exatamente?

Memoization cache é a combinação de duas palavras que descrevem o mecanismo. Memoization é o nome da técnica de memorizar resultados de funções. Cache é o local onde esses resultados ficam guardados. Na prática, toda memoization usa um cache, mas nem todo cache é memoization.

O termo vem do latim _memorandum_, que significa "aquilo que deve ser lembrado". A técnica foi formalizada por Donald Michie em 1968, em um artigo sobre inteligência artificial. Desde então, virou padrão em linguagens como JavaScript, Python e Ruby, principalmente em programação funcional.

Um exemplo clássico é a sequência de Fibonacci. Sem memoization, calcular fib(40) exige milhões de chamadas recursivas. Com memoization, cada valor é calculado uma única vez e reutilizado nas chamadas seguintes. O resultado é o mesmo, mas o tempo de execução cai drasticamente.

## Qual é a diferença entre memoization e caching?

Caching é o conceito mais amplo: armazenar qualquer dado para uso futuro. Pode ser um arquivo em disco, uma resposta de API ou um banco de dados. Memoization é um caso específico de caching, aplicado a funções puras.

Uma função pura é aquela que, para os mesmos argumentos, sempre retorna o mesmo resultado, sem efeitos colaterais. É exatamente esse comportamento que torna a memoization segura. Se a função depende de estado global, de data atual ou de entrada do usuário, o cache pode devolver resultados desatualizados.

Por exemplo, um cache de página web pode armazenar o HTML inteiro por alguns minutos. Já a memoization de uma função que soma dois números guarda apenas o resultado da soma. A diferença está no escopo e no controle de invalidação.

## Como implementar memoization em JavaScript?

Em JavaScript, a implementação mais direta usa um objeto como cache. A função verifica se a chave existe no objeto antes de calcular. Veja um exemplo com uma função que multiplica dois números:

const memoizedMultiply = (() => { const cache = {}; return (a, b) => { const key = ${a}-${b}; if (key in cache) { return cache[key]; } const result = a * b; cache[key] = result; return result; }; })();

A chave é uma string que combina os argumentos. Para funções com um único argumento numérico, a chave pode ser o próprio número. Para múltiplos argumentos, é preciso criar uma chave única, como um separador ou JSON.stringify.

Outra abordagem é usar um Map em vez de objeto. Map aceita qualquer tipo de chave, inclusive objetos, e mantém a ordem de inserção. Para funções que recebem objetos, Map evita a conversão implícita para string.

Em cenários mais complexos, bibliotecas como Lodash oferecem a função _.memoize, que já lida com a criação de chaves. O uso é simples: _.memoize(fn) retorna uma versão memoizada da função original.

## Como aplicar memoization em Python?

Python tem um decorador nativo chamado functools.lru_cache. Ele faz a memoization automaticamente, incluindo o controle de tamanho do cache. Basta adicionar @lru_cache antes da definição da função:

from functools import lru_cache

@lru_cache(maxsize=128) def fibonacci(n): if n

---

Fonte (canonical): https://tntweb.com.br/apps-e-software/memoization-cache-o-que-e-e-como-otimizar-funcoes/
