Recursividad gráficamente

Recorre paso a paso cómo una función recursiva de C++ se llama a sí misma: la pila de llamadas del factorial y el árbol de llamadas de Fibonacci.

Todo se simula en este navegador; no se envía nada a ningún servidor.

Se llama a factorial(4)

Llamadas: 1 · factorial(4) = 24

Se llama a factorial(4)

Pila de llamadas

factorial(4)?
  • En ejecución
  • En espera
  • Resuelta

Paso 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! vale 1 y no hay más llamadas
long r = n * factorial(n - 1); // Caso recursivo: llama con n - 1 y multiplica
return r; // Devuelve el resultado a quien la llamó
}
int main() {
int n = 4; // Es el valor del control deslizante
long resultado = factorial(n); // Primera llamada, desde main
cout << resultado << endl; // Resultado final
return 0;
}

Esta herramienta explica la recursividad de forma gráfica con dos ejemplos clásicos en C++. En el factorial ves la pila de llamadas: cada llamada a factorial(n) se apila como un marco hasta llegar al caso base, y después los marcos se resuelven de uno en uno, devolviendo su valor al que los llamó. En Fibonacci ves el árbol de llamadas: cada fib(n) se ramifica en fib(n-1) y fib(n-2), y las llamadas repetidas aparecen resaltadas para mostrar por qué esta versión recursiva repite tanto trabajo. Eliges el valor de n con un deslizante, reproduces la animación paso a paso y sigues la línea de código que se ejecuta en cada momento. Todo se simula en tu navegador.

Cómo se usa

  1. Elige la pestaña Factorial o Fibonacci según el ejemplo que quieras ver.
  2. Ajusta el valor de n con el deslizante; la animación vuelve al primer paso.
  3. Pulsa Reproducir o avanza con los botones de paso anterior y siguiente, y cambia la velocidad si lo necesitas.
  4. Observa la pila o el árbol de llamadas, el contador de llamadas y la línea resaltada del código C++.

Preguntas frecuentes

¿Qué es la recursividad?
Es una técnica en la que una función se llama a sí misma con un problema más pequeño hasta llegar a un caso que se resuelve directamente, y luego combina los resultados.
¿Qué es el caso base?
Es la condición que detiene las llamadas: en el factorial, n igual a 0 devuelve 1; en Fibonacci, n menor que 2 devuelve n. Sin caso base la recursión no termina.
¿Qué es la pila de llamadas?
Es la estructura donde el programa guarda cada llamada en curso. Cada llamada se apila al hacerse y se desapila cuando devuelve su valor, siguiendo el orden LIFO.
¿Por qué la versión recursiva de Fibonacci repite trabajo?
Porque fib(n) llama a fib(n-1) y a fib(n-2), y esas llamadas vuelven a calcular los mismos valores varias veces. Por eso el árbol crece muy deprisa y las llamadas repetidas se resaltan.

Herramientas relacionadas