Mi propia perspectiva es que los profesores de CS y los escritores de artículos en “revistas aprendidas” de informática profesional parecen preferir la recursión mucho más que los programadores que trabajan y aquellos que crean y mantienen sistemas de código reales, serios (a gran escala).
La recursión es breve e inteligente, pero como cuestión práctica, cada iteración (cada vez que una rutina recursiva se llama a sí misma) carga la pila de llamadas de retorno con un montón de datos de contexto. En algún momento, a medida que regresan todas estas iteraciones de llamadas recursivas, la pila tiene que ser “desenrollada”. Un resultado práctico es que la recursividad tiende a ser más intensiva en memoria y más lenta que un equivalente, explícito, no conciso, no- iteración inteligente Los codificadores reales tienden a odiar el código lento que acapara la memoria más de lo que les gusta parecer breves e inteligentes.
Existe una prueba matemática bien conocida de la proposición de que cualquier recursión se puede replantear como una iteración lógicamente equivalente.
- Cómo diseñar un algoritmo de movimiento para un robot hexápodo
- ¿Para qué sirven las estructuras y algoritmos de datos en el desarrollo de aplicaciones, con ejemplos?
- Cuando reviso algo en Google, muestra una lista de sitios web. Pero, ¿cómo selecciona lo mejor de 1000 sitios web? ¿Hay algún algoritmo?
- ¿Es posible elegir aleatoriamente un número de (0 a infinito), de modo que cada número tenga la misma probabilidad de ser elegido?
- ¿Cuántas veces se realiza la comparación [código] i> = n [/ código] en el siguiente programa? [código] int i = 200, n = 110; main () {while (i> = n) {i = i-1; n = n + 1;}} [/ código]
A veces, cuando ya he escrito una subrutina y me doy cuenta de que tenía que ser un bucle, y miro el problema más amplio y me doy cuenta de que la iteración que debería haber escrito solo se repetirá una o dos veces o un pequeño número de veces, luego Hago una rápida “recursión de cola” fuera de la subrutina, y sigo adelante. No estoy orgulloso de esto, pero a veces ha sucedido (muy raramente). De lo contrario, nunca me molesto en pensar en la recursión.
Me atrevo a decir que lo mismo es cierto para muchos, muchos otros codificadores que realmente se han ganado la vida produciendo código. Quizás incluso la mayoría de esos codificadores son como yo a este respecto.