Cuando se llama a una función, el programa detrás de escena creará algo llamado marco de pila. El marco de la pila es donde se preserva el alcance de las variables de las funciones de llamada y se crean las variables de las funciones llamadas. Si ha estudiado lenguaje ensamblador en una de sus clases y tiene acceso a un depurador de nivel ensamblador, es muy educativo avanzar en la ejecución de la configuración y desmontar estos marcos de pila para invocar el alcance de las variables.
Estos marcos de pila se crean en una pila de llamadas de proceso. El tamaño de la pila de llamadas está limitado en Unix; la memoria asignada para la pila de llamadas se comparte con el montón. El montón es donde se almacenan las variables mallocadas y globales.
En la recursividad, se crea un marco de pila cada vez que se realiza una llamada recursiva. El número de llamadas recursivas que puede realizar depende de la memoria restante no asignada entre la parte superior de la pila de llamadas y la parte superior del montón (crecen en direcciones opuestas). De todos modos, el número de llamadas recursivas que puede hacer es limitado y si no conoce el entorno en el que está trabajando, la depuración será un infierno porque puede fallar en casos irreproducibles.
- ¿Qué significa hashing?
- Cómo calcular la complejidad del algoritmo de ordenamiento por selección
- ¿Qué significa importar en Python? ¿Puedo hacer mi propio algoritmo sin usar importar?
- ¿Cuáles son algunos ejemplos de problemas para los cuales una cola prioritaria resulta útil?
- ¿Cuáles son los tiempos de ejecución para insertar un elemento en un LinkedList en la cabeza, el final y en algún lugar en el medio?
Sin embargo, si convierte su programa para usar un bucle en lugar de recurrencia, evitará los límites del sistema operativo y puede funcionar mucho más tiempo. A veces, su programa se ejecutará de manera más eficiente porque evitará la configuración del marco de llamadas y el desmantelamiento asociado con las llamadas a funciones.