Módulo 9 - Dividir para conquistar e a recursão

A pilha de chamadas: como o computador não se perde

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Entender a pilha de chamadas como um empilhamento de funções em aberto.
  • Acompanhar uma recursão empilhando e desempilhando chamadas.
  • Relacionar a recursão infinita com o estouro de pilha.
  • Perceber que a última chamada a entrar é a primeira a terminar.

A pilha de anotações do computador

Quando uma função A chama uma função B, a função A fica pausada, esperando B terminar para continuar de onde parou. Mas como o computador lembra onde A parou, ainda mais quando há uma cadeia de chamadas, A chama B, que chama C, que chama D? A resposta é uma estrutura chamada pilha de chamadas. Imagine uma pilha de pratos: cada função que começa é um prato colocado no topo, com a anotação de onde ela parou. Quando essa função termina, o prato é retirado do topo e o computador volta para a função do prato de baixo, exatamente no ponto em que ela havia pausado. A regra da pilha é rígida: só se mexe no topo. A última função a ser chamada é a primeira a terminar, e só então a de baixo pode continuar.

Essa pilha é a peça que faltava para entender a recursão de verdade. Cada chamada recursiva empilha um prato novo. Na contagem do fatorial de 4, empilha-se fatorial(4), que chama e empilha fatorial(3), que empilha fatorial(2), que empilha fatorial(1). Nesse ponto a pilha tem quatro pratos, e fatorial(1) é o do topo. Como fatorial(1) é o caso base, ele responde 1 sem empilhar mais nada e sai da pilha. Aí fatorial(2), que estava esperando, recebe esse 1, calcula 2 vezes 1, responde 2 e sai. Depois fatorial(3) recebe o 2, faz 3 vezes 2, responde 6 e sai. Por fim fatorial(4) faz 4 vezes 6 e entrega 24. A recursão desce empilhando e sobe desempilhando, e a pilha é quem guarda cada cálculo em espera.

Uma pilha vertical de quatro pratos empilhados, de baixo para cima: fatorial(4), fatorial(3), fatorial(2) e no topo fatorial(1). Uma seta de subida (empilhar) sobe pela esquerda na ida; uma seta de descida (desempilhar) desce pela direita na volta, com os valores 1, 2, 6 e 24 sendo devolvidos de cima para baixo.
Cada chamada recursiva empilha um prato; ao terminar (do caso base para cima), cada um desempilha devolvendo seu resultado.

O último a entrar é o primeiro a sair

A pilha de chamadas segue uma regra que aparece em muitos lugares da computação: o último a entrar é o primeiro a sair. É o comportamento natural de qualquer pilha física, uma pilha de pratos, de livros, de bandejas: você tira de cima, e a última coisa colocada é a primeira retirada. Nas chamadas de função, isso significa que a chamada mais recente, a que está no topo, é a que precisa terminar primeiro para que as anteriores continuem. Faz todo sentido: A pausou para esperar B; B não pode continuar A, só pode terminar e devolver o controle. Essa ordem estrita é o que permite ao computador administrar cadeias de chamadas profundas sem se perder, sabendo sempre para onde voltar: para o prato imediatamente abaixo do topo.

🎮 Jogo da aula

A ordem em que as chamadas terminam

As funções foram chamadas nesta ordem: principal chama A, A chama B, B chama C. Ordene em que ordem elas TERMINAM (a primeira a terminar no topo).

    Quando a pilha estoura

    Agora dá para entender de onde vem o famoso erro de estouro de pilha. A pilha de chamadas tem um limite de tamanho: cabem muitas chamadas empilhadas, mas não infinitas. Numa recursão saudável, os pratos empilham até o caso base e depois desempilham, então a pilha nunca cresce demais. Mas numa recursão infinita, a função chama a si mesma sem parar, empilhando prato após prato sem nunca desempilhar, porque nenhuma chamada chega ao fim. A pilha enche, bate no limite e o programa estoura, com uma mensagem que em muitas linguagens fala em stack overflow, ou pilha estourada. Por isso, quando você vê esse erro, o suspeito número um é uma recursão sem caso base ou com caso base inalcançável. O erro é chato, mas é honesto: ele avisa exatamente qual foi o descuido.

    Teste rápido

    Um programa recursivo estoura com um erro de pilha (stack overflow). Qual é a causa mais provável?

    Perguntas frequentes

    O que é a pilha de chamadas?
    É a estrutura onde o computador anota as funções que começaram mas ainda não terminaram. Cada chamada nova vai para o topo; ao terminar, sai do topo e o controle volta para a de baixo. Funciona como uma pilha de pratos, onde o último colocado é o primeiro retirado.
    Por que a última função chamada é a primeira a terminar?
    Porque quando uma função chama outra, ela pausa e espera a chamada terminar para continuar. A chamada mais recente, no topo da pilha, precisa terminar antes para liberar a que a chamou. É a regra último a entrar, primeiro a sair, natural de qualquer pilha física.
    O que é estouro de pilha (stack overflow)?
    É o erro que acontece quando a pilha de chamadas enche além do limite. A causa mais comum é recursão infinita: chamadas que nunca terminam empilham sem parar até esgotar o espaço. Ao ver esse erro num programa recursivo, o primeiro suspeito é um caso base ausente ou inalcançável.
    A pilha de chamadas existe só na recursão?
    Não: ela funciona para qualquer chamada de função, recursiva ou não. Toda vez que uma função chama outra, a pilha registra por onde voltar. A recursão só a torna mais visível, porque empilha muitas chamadas da mesma função. Mas ela está lá o tempo todo, gerenciando o vaivém das chamadas.
    Recursão profunda demais pode estourar mesmo sem ser infinita?
    Pode, em casos extremos. Se uma recursão válida faz um número enorme de chamadas antes de chegar ao caso base (por exemplo, dezenas de milhares), ela pode encher a pilha e estourar mesmo terminando em teoria. Para esses casos, às vezes se prefere a versão com laço, que não empilha chamadas.
    Entender a pilha ajuda a programar melhor?
    Ajuda muito. Ela desmistifica a recursão (você enxerga as chamadas empilhando e desempilhando), explica o estouro de pilha e aparece até na leitura de mensagens de erro, que muitas vezes mostram a pilha de chamadas do momento do problema. É um conceito que ilumina o funcionamento por baixo do código.

    Fontes

    Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.