Creo que todos los problemas que tienen la lógica iterativa se pueden resolver usando iteraciones, pero ¿podemos resolver cualquier problema utilizando la recursión? ¿Puede la recursión siempre sustituir la iteración? Proporcione una prueba de su respuesta si puede. Supongamos también que tenemos una pila infinita o ejecutamos el programa en una máquina de Turing. No me importa si esta prueba es una prueba teórica. (es por eso que mencioné la Máquina de Turing)Recursion Vs Iteration
Respuesta
Sí, la recursividad siempre puede sustituir a la iteración, esto se ha discutido before. Citando de la publicación vinculada:
Dado que puede construir un lenguaje completo de Turing utilizando estructuras estrictamente iterativas y un lenguaje completo de torneado utilizando únicamente estructuras recursivas, las dos son equivalentes.
Explicando un poco: sabemos que cualquier problema computable puede ser resuelto por una máquina de Turing. Y es posible construir un lenguaje de programación A
sin recursión, que es equivalente a una máquina de Turing. De forma similar, es posible construir un lenguaje de programación B
sin iteración, igual en potencia computacional a una máquina de Turing.
Por lo tanto, si ambos A
y B
son Turing-complete podemos concluir que para cualquier programa iterativo debe existir un programa recursivo equivalente, y viceversa. Este es un resultado teórico, en el sentido de que no da ninguna pista sobre cómo derivar un programa recursivo de un programa iterativo arbitrario, o viceversa.
Gracias, me perdí este enlace cuando busqué en el sitio web –
Sí. Hay un tipo de recursión llamado tail recursion, que se puede traducir directamente a iteración. Uno puede convertirse a otro sin ningún problema. Por lo tanto, todas las soluciones iterativas se pueden convertir en soluciones recursivas.
De hecho, muchos compiladores pueden detectar que está haciendo recursividad de cola, y luego convertirlo en código de tipo for-loop para mayor eficiencia.
Se debe utilizar una recursividad cuando no se necesita un bucle, pero el método debe repetirse en un caso determinado. Por ejemplo, comprimir una carpeta. Si hay una subcarpeta, debería llamarse a sí misma (recursiva). Recursion podría sustituir las iteraciones si quisiera, pero no es recomendable. La mayoría de las personas solo usa iteraciones y solo usa recursiones cuando las necesita.
- 1. Eficiencia: recursion vs loop
- 2. std :: list vs std :: vector iteration
- 3. Linq - Lookahead Iteration
- 4. SQL Recursion
- 5. Python quicksort - Lista de comprensión vs Recursion (rutina de partición)
- 6. Google Collections ImmutableMap iteration order
- 7. Recursion usando AspectJ
- 8. encontrar sin recursion
- 9. Ruby recursion issue
- 10. async ctp recursion
- 11. Algorithm/Recursion tree challenge
- 12. SQL Server 2008 CTE Recursion
- 13. Factorial usando Recursion en Java
- 14. IEnumerable y Recursion using yield return
- 15. SQL CTE Recursion: Registros primarios recurrentes
- 16. ¿Qué significa * RECURSION * cuando imprime $ GLOBALS?
- 17. django: recursion usando la señal de post-guardado
- 18. Recursion sobre una lista de listas sin isinstance()
- 19. MySQL date diff iteration query - optimizar la consulta u optimizar la estructura de datos
- 20. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 21. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 22. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 23. ACE vs Boost vs Poco vs wxWidgets
- 24. VS 2008 vs VS 2008 Express
- 25. Atomikos vs JOTM vs Bitronix vs?
- 26. Acumular vs fold vs reducir vs compress
- 27. .NET vs ASP.NET vs CLR vs ASP
- 28. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 29. método vs función vs procedimiento vs clase?
- 30. Rhino simulacro vs Typemock vs JustMock vs
Alguien me puede corregir aquí, pero no son algunos idiomas ("lenguajes puramente funcionales") * completamente * basado en la recursividad? Lenguajes Lisp, por ejemplo? –
@TonyR Los lenguajes Lisp no son puramente funcionales en absoluto. –
Entonces, ¿qué hay de "lenguajes funcionales"? –