Saltar al contenido

Desbordamiento de pila

La pila de llamadas tiene un tamaño fijo (unos megabytes). Una función recursiva que recorre una lista enlazada de un millón de nodos, una llamada por nodo, apila un millón de registros y agota ese espacio: el programa termina con un desbordamiento de pila. Por eso muchas bibliotecas recorren sus estructuras con un bucle, o con una pila propia sobre un array dinámico, que crece en la memoria general.

Lo que importa no es cuántos nodos tiene la estructura, sino cuántas llamadas están abiertas a la vez, porque un registro se desapila al terminar su llamada. Piensa en una función que recorre un árbol de carpetas y se llama una vez por carpeta: su pila de llamadas aguanta 10 000 registros. ¿Qué forma de árbol la hace fallar?

Una función recursiva recorre un árbol de carpetas llamándose una vez por carpeta. Su pila de llamadas aguanta 10 000 registros. ¿Cuál de estos árboles la hace fallar?