¿Se introdujo la recursión a propósito?
¿Los programadores descubrieron que realmente podían llamar a la función en la función misma, o esto ya se sabía?
Siempre me sorprende lo especial que la gente piensa que es la recursión. No lo encuentro así en absoluto. No es especial Por lo general, la recursión funciona como cualquier otra función a la que pueda llamar. *
- ¿Cuál es el mejor algoritmo de compresión de imágenes y cuál es el algoritmo de compresión de Facebook?
- ¿Qué son las estructuras autorreferenciales?
- Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.
- ¿Cuáles son las diferencias entre DFS y BFS?
- Cómo obtener el vértice extremo de un gráfico
Para que un lenguaje moderno no admita la recursividad, el idioma debería tener un soporte especial para “llamar a cualquier función, pero no a esta, ni a ninguna de las que llamó para llegar aquí”.
Algunos idiomas tempranos no admitían la recursividad como efecto secundario. Es decir, permitieron llamar a una función, pero tenían un lugar específico donde iría la dirección del remitente. Eso significaría que podría llamar a una función, pero no podría llamar a una función desde esa función.
Pero si tiene algún lenguaje, incluido el ensamblado, que haya pensado en un patrón genérico para invocar funciones desde dentro de las funciones, probablemente esté utilizando la pila. Entonces, llamar a una función funcionaría presionando la dirección de retorno en la pila, luego presionando argumentos. La función a la que estaba llamando tendría que extraer los argumentos, luego ejecutar su código y luego regresar (lo que desactivaría la dirección de retorno y saltaría a ella).
Lea el párrafo anterior nuevamente y vea lo que tendría que hacer para que la recursividad no funcione. Debería saber dónde comenzó el método actual y no permitir que nadie salte a esa dirección. Eso aún permitiría que el método A llame a B, que luego llama a A nuevamente (lo que sería recursivo). Ugh
Los primeros programadores generalmente tenían una máquina costosa con trabajadores relativamente baratos (lo opuesto a la situación actual). Generalmente no jugaban en las máquinas, y normalmente ni siquiera tenían acceso a la máquina. Escribirían código que en algún momento sería enviado por un operador, y recuperarían sus resultados. Tendrían que tener mucho cuidado a qué lugares saltar. No puedo imaginarlos llamando a una función desde dentro de la función por accidente.
* La recursión es un patrón lo suficientemente común como para que algunos compiladores hayan realizado optimizaciones específicas para usos específicos donde puedan, como reemplazar la recursividad de llamadas de Tail con un bucle.