¿Qué es un árbol de recursión?
Un árbol de recursión es una representación visual de cada llamada que realiza una función recursiva. Cada nodo muestra los argumentos recibidos y el valor devuelto. Las aristas padre-hijo representan qué llamada originó qué sub-llamada. Al leer el árbol de arriba hacia abajo puedes trazar el orden de ejecución exacto y entender cómo el problema se descompone en subproblemas más pequeños.
Por qué importa la memoización
Muchos algoritmos recursivos revisitan los mismos subproblemas varias veces; Fibonacci es el ejemplo clásico donde fib(3) se calcula más de una vez. La memoización almacena los resultados de los subproblemas ya resueltos para que se devuelvan al instante en llamadas repetidas. Esta técnica transforma la complejidad temporal exponencial en polinómica o lineal, que es la idea central de la programación dinámica.
Leer la pila de llamadas
La pila de llamadas es la cadena de llamadas de función activas en cualquier momento durante la ejecución. En este visualizador, la profundidad de un nodo corresponde a su posición en la pila. Los árboles profundos significan más marcos de pila, lo que puede provocar errores de desbordamiento en programas reales. Observar la profundidad de la pila te ayuda a entender el uso de memoria e identificar cuándo un enfoque iterativo podría ser más seguro.
Patrones comunes de recursión
La recursión lineal se llama a sí misma una vez por invocación; los ejemplos incluyen el factorial y el recorrido de listas enlazadas. La recursión binaria hace dos llamadas por invocación; Fibonacci y el ordenamiento por fusión siguen este patrón. La recursión de árbol se generaliza a tres o más ramas, como se ve en las Torres de Hanói. Comprender estos patrones te ayuda a predecir la complejidad temporal antes de escribir cualquier código.