Recursão visualizada

Acompanhe passo a passo como uma função recursiva em C++ chama a si mesma: a pilha de chamadas do fatorial e a árvore de chamadas de Fibonacci.

Tudo é simulado neste navegador; nada é enviado a nenhum servidor.

factorial(4) é chamada

Chamadas: 1 · factorial(4) = 24

factorial(4) é chamada

Pilha de chamadas

factorial(4)?
  • Em execução
  • Em espera
  • Resolvida

Passo 1 / 16

Código

#include <iostream>
using namespace std;
long factorial(int n) { // Calcula n! de forma recursiva
if (n == 0) return 1; // Caso base: 0! é 1 e não há mais chamadas
long r = n * factorial(n - 1); // Caso recursivo: chamar com n - 1 e multiplicar
return r; // Devolve o resultado ao chamador
}
int main() {
int n = 4; // Este é o valor do controle deslizante
long resultado = factorial(n); // Primeira chamada, a partir de main
cout << resultado << endl; // Resultado final
return 0;
}

Esta ferramenta explica a recursão de forma visual com dois exemplos clássicos em C++. No fatorial você vê a pilha de chamadas: cada chamada a factorial(n) é empilhada como um quadro até chegar ao caso base, e então os quadros são resolvidos um a um, devolvendo seu valor a quem os chamou. Em Fibonacci você vê a árvore de chamadas: cada fib(n) se ramifica em fib(n-1) e fib(n-2), e as chamadas repetidas são destacadas para mostrar por que essa versão recursiva faz tanto trabalho duplicado. Você escolhe n com um controle deslizante, reproduz a animação passo a passo e acompanha a linha de código executada a cada momento. Tudo é simulado no seu navegador.

Como usar

  1. Escolha a aba Fatorial ou Fibonacci conforme o exemplo que deseja ver.
  2. Ajuste n com o controle deslizante; a animação volta ao primeiro passo.
  3. Clique em Reproduzir ou avance com os botões de passo anterior e seguinte, e altere a velocidade se precisar.
  4. Observe a pilha ou a árvore de chamadas, o contador de chamadas e a linha de código C++ destacada.

Perguntas frequentes

O que é recursão?
É uma técnica em que uma função chama a si mesma sobre um problema menor até chegar a um caso que pode ser resolvido diretamente, e então combina os resultados.
O que é o caso base?
É a condição que interrompe as chamadas: no fatorial, n igual a 0 devolve 1; em Fibonacci, n menor que 2 devolve n. Sem caso base, a recursão nunca termina.
O que é a pilha de chamadas?
É a estrutura em que o programa guarda cada chamada em andamento. Cada chamada é empilhada ao ser feita e desempilhada ao devolver seu valor, seguindo a ordem LIFO.
Por que o Fibonacci recursivo repete trabalho?
Porque fib(n) chama fib(n-1) e fib(n-2), e essas chamadas calculam os mesmos valores várias vezes. Por isso a árvore cresce tão rápido e as chamadas repetidas são destacadas.

Ferramentas relacionadas