Skip to main content

Abrir el simulador

Potencia, factorial, MCD, Fibonacci y suma de un vector: pila y árbol de llamadas, y su versión iterativa.
Una función recursiva se llama a sí misma con un problema más pequeño. Bien usada, permite escribir soluciones muy cortas a problemas que serían enrevesados con bucles. Pero para entenderla hay que ver qué pasa en la pila con cada llamada. Este simulador lo muestra paso a paso, junto con el árbol de llamadas y la versión iterativa equivalente.

Lo que vas a aprender

  • Las partes de un diseño recursivo: caso base, caso general y combinación.
  • Las fases de descenso y ascenso.
  • La pila de llamadas y el árbol de llamadas.
  • Los tipos de recursión: lineal, final y múltiple.
  • Cómo transformar una función recursiva en iterativa.

Cómo se usa el simulador

  • Elige la función: potencia, factorial, semifactorial, MCD, Fibonacci o suma de un vector.
  • Elige la versión recursiva o iterativa.
  • Ajusta los parámetros y avanza con ⏮, ◀, ▶ Ejecutar, ▶ y ⏭.
  • Se ven el código con la línea actual y la fase (descenso o ascenso), la pila de llamadas, el árbol de llamadas (en ejecución, en espera o terminadas) y los contadores de llamadas y tamaño máximo de la pila.

Fundamentos teóricos

Diseño recursivo

  1. Caso base: un caso tan sencillo que se resuelve directamente.
  2. Caso general: reduce el problema a uno más pequeño del mismo tipo.
  3. Combinación: construye el resultado a partir del de la llamada.

Descenso y ascenso

  • Descenso: se van apilando llamadas, cada una esperando a la siguiente, hasta el caso base.
  • Ascenso: cada llamada recibe el resultado de la siguiente, aplica la combinación y devuelve el suyo.

Tipos de recursión

Coste

  • Lineal: nn llamadas y pila de profundidad nn.
  • Fibonacci recursivo ingenuo: el número de llamadas crece exponencialmente (≈1,6n\approx 1{,}6^n), porque recalcula muchas veces los mismos valores.

De recursiva a iterativa

  • Recursión final: basta un bucle que actualice los parámetros.
  • No final: un bucle de descenso hasta el caso base y otro de ascenso que aplica la combinación (o calcular directamente de abajo arriba).

Ejemplos resueltos

Ejemplo 1 · potencia(2, 3)

Descenso: potencia(2, 3) → (2, 2) → (2, 1) → (2, 0). Caso base: 1.Ascenso: 1⋅2=21 \cdot 2 = 2; 2⋅2=42 \cdot 2 = 4; 4⋅2=84 \cdot 2 = 8. 4 llamadas, pila máxima de 4 marcos.
5!=5⋅4!=5⋅4⋅3!=⋯=1205! = 5 \cdot 4! = 5 \cdot 4 \cdot 3! = \dots = 120, con caso base 0!=10! = 1.
fib(5) con fib(n)=fib(n−1)+fib(n−2)\text{fib}(n) = \text{fib}(n-1) + \text{fib}(n-2) y casos base fib(0) = 0, fib(1) = 1 hace 15 llamadas: fib(3) se calcula dos veces y fib(2), tres.
mcd(84, 60) → mcd(60, 24) → mcd(24, 12) → mcd(12, 0) = 12. Como es final, el resultado sube sin operar.

Experimenta con el simulador

1

La pila

Con potencia, sube n y mira el tamaño máximo de la pila.
2

Fibonacci

Con Fibonacci, pasa de n = 4 a n = 8. ¿Cuánto crece el número de llamadas?
3

Iterativa

Cambia a la versión iterativa del factorial y compara.

Errores frecuentes

  • Olvidar el caso base o que el caso general no se acerque a él: desbordamiento de pila.
  • Usar Fibonacci recursivo para valores grandes.
  • Confundir recursión final con no final.

Herramientas relacionadas

Divide y vencerás

Recursión que parte el problema.

Backtracking

Recursión que explora.

Memoria y punteros

La pila por dentro.
Última modificación el 6 de octubre de 2026