Si comprende cómo funcionan las llamadas a funciones y los retornos a funciones,
La recursión es solo un caso especial.
El programa posee una porción especial de memoria asignada para admitir llamadas a funciones: la pila de programas (puede agregarla y eliminarla, pero solo en un extremo).
Cuando se emite una llamada de función
- ¿Cuáles son los alcances profesionales para un ingeniero informático que no le gusta la programación y el diseño web?
- ¿Es VLIS en CMU o SRE en Google London una mejor opción de carrera?
- ¿Cuál es el mejor curso en línea para aprender programación?
- ¿Qué debo hacer si estoy en ingeniería informática pero no estoy tan interesado en la codificación?
- ¿Cómo identifica un sistema operativo / software la cantidad de núcleos (lógicos) en un sistema?
- Todas las variables locales en el alcance actual se guardan en la pila del programa
- la dirección de retorno se guarda en la pila del programa
- los argumentos de la llamada a la función se guardan en la pila del programa (posiblemente incluyendo un puntero al objeto, cuyo método se llama)
- el control se le da a la función
- la función lee los argumentos de la pila
- la función establece variables locales y hace su trabajo
Cuando la función vuelve
- sus variables locales quedan fuera de alcance (esto puede requerir trabajo de limpieza, como llamar a destructores)
- la dirección de retorno se lee de la pila
- el valor de retorno se empuja a la pila
- el control se pasa a la persona que llama en la dirección de devolución
Dado que las llamadas a funciones y los retornos de funciones llevan tiempo, querrá incorporar funciones cuando su código fuente esté disponible durante la compilación (a menudo no es el caso con las bibliotecas estándar). Sin embargo, es mucho más difícil incorporar funciones recursivas.
Otras consecuencias importantes.
- no pase objetos grandes por valor, si se pueden pasar por índice / referencia / puntero (C ++ 11 tiene un giro adicional en esto)
- no uses montones de variables locales
- evitar la recursividad cuando sea práctico; tenga en cuenta que la pila de programas suele ser muy limitada, lo que limita la profundidad de recursión; por ejemplo, las implementaciones recursivas de recorridos básicos de gráficos no se escalan a gráficos grandes
Tenga en cuenta que no hemos hablado sobre el hardware o incluso el sistema operativo.
El entorno de tiempo de ejecución del lenguaje generalmente se ocupa de tales cosas, aunque el soporte del sistema operativo es importante.