JavaScript · Avançado · Português · Técnico
trampolim
Padrão que troca recursão por um laço: a função devolve outra função, em vez de se chamar. Evita estourar a pilha, pois quase nenhum motor otimiza chamadas finais.
Onde usar
Usado em recursões muito profundas, como percorrer uma lista com milhares de elementos. Em code review, costuma ser melhor trocar por um laço, mas o trampolim preserva o estilo recursivo.
Em código
const tramp = (f) => (...a) => {
let r = f(...a);
while (typeof r === 'function') r = r();
return r;
};
const s = (n, acc = 0) =>
n ? () => s(n - 1, acc + n) : acc;
console.log(tramp(s)(100000)); // 5000050000Exemplos
Troquei a recursão por um trampolim para não estourar a pilha.
Cada passo devolve uma função, e o trampolim roda até sobrar um valor.
Cuidado
Usar recursão comum com cem mil níveis esperando que o motor otimize, o que termina em RangeError.
Sinônimos
trampoline