Recursión – pila de llamadas y árbol de llamadas
InformáticaAlgoritmos y resolución de problemasEdades 17–18
Cargando…
Inicia sesión para usarEjecuta paso a paso funciones recursivas – factorial, Fibonacci, suma de una lista, búsqueda binaria, el rompecabezas de la torre de discos y ordenamiento por mezcla – y observa cómo la pila de llamadas crece y se vacía mientras un árbol registra cada llamada, cada caso base y cada valor devuelto. Compara Fibonacci recursivo simple con memoización y con un bucle, quita el caso base para provocar un desbordamiento de pila y lee el código en Python o pseudocódigo.
Lección: Recursión: caso base, pila de llamadas, divide y vencerás, memoización, recursión frente a iteración
Qué muestra
Una función recursiva resuelve un problema llamándose a sí misma con una versión más pequeña del mismo problema. Cada llamada apila un nuevo marco en la pila de llamadas; el caso base devuelve un valor sin volver a llamar, y luego los marcos se desapilan mientras los valores suben. El árbol de llamadas muestra todas las llamadas: factorial y la suma de una lista forman una sola cadena, mientras que Fibonacci, el ordenamiento por mezcla y la torre se ramifican. Fibonacci simple repite las mismas llamadas, así que su número crece exponencialmente; la memoización guarda los resultados. Sin caso base, la pila se desborda.
Cómo usarla
Elige una Función y ajusta n (o el Objetivo en la búsqueda binaria). Pulsa Paso para hacer una llamada o un retorno cada vez, Atrás para deshacer un paso o Ejecutar para reproducir a la Velocidad elegida. Observa el código, la pila y el árbol; toca un nodo para ver detalles. Marca Memo en Fibonacci o desmarca Con caso base para ver un desbordamiento de pila.
Parámetros que puedes cambiar
- Función recursiva Factorial n!, Números de Fibonacci, Suma de una lista, Búsqueda binaria, Torre de discos (rompecabezas), Ordenamiento por mezcla
- n (tamaño del problema) 0–8
- Valor buscado (búsqueda binaria) 0–100
- Memoización (Fibonacci)
- Incluir el caso base
- Lenguaje Python, Pseudocódigo
- Velocidad 0,5–10 pasos/s
Preguntas para explorar
- ¿Cuántas veces se llama a fib(2) al calcular fib(6) sin memoización, y cuántas con ella?
- ¿Cuál es la profundidad máxima de la pila para factorial(5), y cuánta pila necesita la versión con bucle?
- ¿Por qué quitar el caso base provoca un desbordamiento de pila y no una respuesta incorrecta?