JavaScriptFunçõesavancado

Trampolim para recursão

Recursão é elegante, mas em JavaScript, cada chamada empilha um frame na call stack. Para funções que se chamam milhares de vezes, como soma acumulada, o stack estoura rápido. Trampolining resolve isso: transforma a recursão em um loop que executa passo a passo, sem acumular frames. Técnica usada em implementações de linguagens funcionais e em polyfills de TCO.

O PROBLEMA

Implemente trampolim(fn) para executar recursão sem estourar a call stack.

EXEMPLO

const soma = trampolim(function s(n, acc=0) {
  return n===0 ? acc : () => s(n-1, acc+n);
});
soma(100000) → 5000050000

SOBRE O CONCEITO

O trampolim recebe uma função fn e retorna uma nova que executa fn em um loop while. A cada iteração, fn é chamada; se o retorno for uma função (typeof retorno === 'function'), o loop continua chamando-a; caso contrário, retorna o valor. Erro comum: não verificar o tipo de retorno — sem o typeof, o trampolim tentaria chamar um número como função, ou pularia a execução da thunk. Outro erro: a função interna deve retornar uma thunk (função sem argumentos) em vez de fazer a chamada recursiva direta. Exemplo: function s(n, acc=0) { return n===0 ? acc : () => s(n-1, acc+n); }.

RESOLUÇÃO

Mais exercícios de Funções

JSF019 · IntermediárioComposição de funçõesJSF020 · IntermediárioIIFEJSF022 · AvançadoGenerator functionJSF023 · AvançadoFunção pura vs impura
Ver todos os exercícios de JavaScript