¿Se introdujo la recursión a propósito?

¿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. *

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.

Las funciones provienen de las matemáticas.

La mayoría de los programadores de primera generación también eran matemáticos.

La recursión se introdujo hace mucho tiempo y se aplicó a la informática una vez que las funciones se convirtieron en parte integral.

More Interesting

Cómo resolver este problema DP (http://codeforces.com/gym/101061/problem/F)

¿Cómo se comparten de forma segura las claves de los algoritmos de cifrado y descifrado entre el emisor y el receptor sin ser interrumpidos por intrusos?

¿Cuáles son los algoritmos que uno debería usar para generar automáticamente intentos de chatbots?

¿Qué algoritmos pueden ordenar los datos que se dividen en varias máquinas?

Cómo aprender a escribir buenos algoritmos

¿Cuál es el algoritmo hash más popular para almacenar contraseñas?

Cómo escribir un programa C # para implementar un algoritmo de programación SRTF (el tiempo restante más corto primero), junto con la visualización del diagrama de Gantt

Cómo demostrar que este gráfico todavía puede estar fuertemente conectado

¿Cómo resolvería problemas de pedigrí (en biología) utilizando algoritmos genéticos?

¿Cuán ampliamente se utilizan los algoritmos de bandidos en los sistemas de recomendaciones modernos reales? ¿Y de qué manera?

En la industria, ¿con qué frecuencia se usa el algoritmo de compresión Lempel-Ziv-Welch?

Lingüística computacional: ¿Cuál es la mejor manera de encontrar coincidencias aproximadas de cadenas (duplicados difusos) entre un conjunto de N cadenas?

¿Cómo crean los algoritmos los programadores de software?

¿Cómo aprenden los algoritmos de aprendizaje de refuerzo del juego de ajedrez a jugar bien, dado que cada movimiento no está etiquetado como bueno o malo, a diferencia del aprendizaje supervisado donde cada dato está etiquetado como bueno o malo?

Cómo encontrar la Kth ruta más corta de un nodo a otro en un gráfico