Módulo 2 - Pilhas: a estrutura em que o último entra e sai primeiro

A pilha de chamadas e o botão desfazer

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

O que você vai aprender

  • Explicar como o botão desfazer usa uma pilha para reverter ações.
  • Relacionar o voltar do navegador à regra LIFO.
  • Entender a pilha de chamadas como o mecanismo que guarda o retorno das funções.
  • Reconhecer o estouro de pilha como consequência de chamadas sem fim.

Desfazer e voltar: a pilha em ação

Pense no que acontece quando você digita num editor de texto. Cada ação, escrever uma palavra, apagar uma frase, colar um trecho, é guardada numa pilha de ações. Ao apertar desfazer, o programa desempilha a última ação e a reverte. Aperte desfazer de novo e ele desempilha a penúltima, e assim por diante, voltando no tempo na ordem inversa exata em que você agiu. Isso é a regra LIFO trabalhando por você: a última coisa que você fez é a primeira a ser desfeita. Se fosse uma fila, o desfazer reverteria suas ações mais antigas primeiro, o que não faria o menor sentido.

O botão voltar do navegador é a mesma ideia com outra roupa. Cada página que você visita é empilhada sobre a anterior. Quando você clica em voltar, o navegador desempilha a página atual e mostra a que estava logo abaixo, a última que você tinha visto antes. Clique em voltar várias vezes e você desce a pilha de páginas, refazendo sua trilha de trás para frente. Editores de imagem, planilhas, aplicativos de desenho, quase todo software com um desfazer decente carrega uma pilha por dentro. Reconhecer esse padrão é entender por que a estrutura importa: ela não é teoria, é o que faz o desfazer parecer natural.

Diagrama de uma pilha de chamadas com três quadros empilhados: na base a função principal, acima dela a função A, e no topo a função B, cada quadro anotado com o ponto de retorno. Setas mostram B terminando e sendo desempilhada, o controle voltando para A, e depois A voltando para principal.
A pilha de chamadas guarda cada função ativa e seu ponto de retorno. Quem termina por último volta primeiro.

A pilha que o computador mantém sozinho

Aqui está o uso mais profundo, e muitas vezes invisível, da pilha: a pilha de chamadas. Toda vez que uma função chama outra, o computador precisa lembrar de onde a chamada partiu, para poder voltar quando a função chamada terminar. Ele faz isso empilhando um registro da função atual. Se a função principal chama A, e A chama B, a pilha tem três registros: principal no fundo, A no meio, B no topo. Quando B termina, seu registro é desempilhado e a execução volta para A, exatamente no ponto onde A tinha chamado B. Quando A termina, volta para principal. É uma pilha porque a última função chamada é a primeira a terminar e devolver o controle.

🎮 Jogo da aula

A ordem da pilha de chamadas

A função principal chama A, e A chama B. Coloque os eventos da pilha de chamadas na ordem em que acontecem.

    Essa mecânica explica também um erro famoso: o estouro de pilha. Se uma função chama a si mesma sem nunca parar, uma recursão sem caso base, por exemplo, a pilha de chamadas cresce sem fim. Cada chamada empilha um registro novo, e como nenhuma termina, nada é desempilhado. A pilha enche até bater no limite de memória e o programa quebra com a mensagem de estouro de pilha. Entender que existe uma pilha por trás das chamadas transforma esse erro de um mistério assustador num sintoma claro: em algum lugar, as chamadas estão entrando e não estão saindo.

    Por que reconhecer o padrão importa

    O que une o desfazer, o voltar e a pilha de chamadas é o mesmo padrão de raciocínio: sempre que você precisa lembrar de onde veio para poder retornar, e retornar na ordem inversa, a pilha é a estrutura natural. Não é coincidência que problemas tão diferentes usem a mesma solução. Um bom programador aprende a enxergar esse formato: se o problema tem cheiro de voltar ao passo anterior, de aninhar coisas dentro de outras, de reverter na ordem contrária, a pilha provavelmente resolve. Essa aula tratou de casos prontos, mas a próxima mostra você mesmo usando uma pilha para resolver um problema clássico do zero.

    Teste rápido

    Por que a regra LIFO é ideal para um botão desfazer?

    Perguntas frequentes

    O botão desfazer usa mesmo uma pilha?
    Sim, é o uso clássico. Cada ação do usuário é empilhada; ao desfazer, a última ação é desempilhada e revertida. Muitos programas mantêm até duas pilhas, uma para desfazer e outra para refazer, mas o coração do mecanismo é a pilha e a regra de reverter o mais recente primeiro.
    O que é exatamente a pilha de chamadas?
    É a estrutura que o computador usa para controlar quais funções estão em execução e para onde cada uma deve retornar. Cada chamada empilha um registro; cada término desempilha. Ela permite que funções chamem funções livremente, porque sempre há como voltar ao ponto exato de onde a chamada partiu.
    Por que a recursão pode causar estouro de pilha?
    Porque cada chamada recursiva empilha um novo registro na pilha de chamadas. Se a recursão não tem um caso base que a faça parar, ela chama a si mesma sem fim, empilhando sem nunca desempilhar. A pilha cresce até estourar o limite de memória, e o programa é interrompido com erro de estouro de pilha.
    O voltar e o avançar do navegador são a mesma pilha?
    São duas pilhas trabalhando juntas. O voltar desempilha a página atual e a coloca numa pilha de avançar; o avançar faz o caminho de volta. Assim você navega para trás e para frente pela sua trilha. A ideia central continua sendo a mesma: guardar o histórico e revisitá-lo na ordem certa.
    Como o computador sabe para onde voltar depois de uma função?
    Ao chamar uma função, o computador empilha o ponto de retorno, o lugar do código onde deve continuar quando a função terminar. Quando ela termina, esse ponto é desempilhado e a execução segue exatamente dali. Sem a pilha de chamadas, funções aninhadas não teriam como retornar corretamente.
    Preciso programar a pilha de chamadas eu mesmo?
    Não. A pilha de chamadas é gerenciada automaticamente pela linguagem e pelo ambiente de execução. Você não a cria nem a manipula diretamente no dia a dia. Entender que ela existe, porém, ajuda a diagnosticar erros como o estouro de pilha e a compreender como a recursão funciona por dentro.

    Fontes

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