¿Se puede transformar toda solución recursiva en una solución iterativa?

Diré que sí … pero con una advertencia.

La advertencia es que hacerlo puede requerir mucho trabajo adicional, y puede requerir cambiar sus estructuras de datos.

Un ejemplo es eliminar un nodo de un árbol equilibrado.

La solución recursiva es limpia y simple. El árbol solo necesita dos enlaces.

La solución iterativa modifica la estructura del nodo del árbol O debe simular la pila utilizando matrices dinámicas.

La modificación del árbol de nodos agrega un vínculo de retroceso al padre de un nodo. Esto permite que la solución iterativa retroceda el árbol desde un nodo para equilibrar el árbol al eliminar un nodo (en cuanto a velocidad, no está mal, pero usa más memoria para cada nodo). Simular la pila es una alternativa … pero requiere muchas asignaciones y desasignaciones (incluso más lento que modificar el árbol).

A veces, la recursión es realmente la mejor solución.

Sí, es comprobable que cada solución recursiva también se puede implementar como una solución iterativa. Dicho esto, el código puede no ser tan claro.

La razón principal para preocuparse por esto, por supuesto, es que una recursión realmente profunda corre el riesgo de volar la pila de llamadas .

En general, un enfoque para convertir una solución recursiva en una iterativa es simplemente mantener su propia estructura de datos de pila y usarla para almacenar cada contexto sucesivo a medida que explora el BST, o realiza su búsqueda de gráfico BFS, o lo que sea que esté haciendo. Puede almacenar menos datos que un marco de pila completo, y el espacio de almacenamiento dinámico de memoria es un poco menos valioso que el espacio de pila de llamadas (al menos para tiempos de ejecución que conozco).

Si.

  • Cada función computable es computable por una máquina de Turing adecuada.
  • Una TM se define como ejecutar un paso simple repetidamente, en otras palabras, un bucle.

¿Qué dice esto? Para cualquier función computable existe una implementación de bucle. ¿Puedes encontrarlo en un tiempo finito? Se puede demostrar que esto no es posible para una función arbitraria.

En conclusión, si bien hay una implementación de bucle para cualquier función recursiva (¡eso fue un juego de palabras!) No hay garantía de que pueda construir una. Excepto, por supuesto, en el sentido de la traducción a una implementación de máquina basada en pila que opera esencialmente de la misma manera que una TM.

More Interesting

¿Cuál es el significado de la simulación de recursividad?

¿Cómo se calcula el PageRank? ¿Cuál fue el PageRank inicial? ¿Cómo comienza el algoritmo?

¿Cuál es el algoritmo utilizado para convertir cadenas en enteros?

Soy un desarrollador web que trabaja en el marco Python Django durante el año pasado. ¿Puedo aprender estructuras de datos y algoritmos si paso solo 2-3 horas diarias?

Cómo llegar a la lógica para construir un método de impresión inversa que imprima los nodos en una lista vinculada usando un enfoque recursivo usando Java

¿Qué sitio web / tutorial / video puedo usar para comprender muy bien la programación dinámica en un día?

¿Cuáles son algunos algoritmos que usamos diariamente que tienen complejidades [matemáticas] O (n), O (n ^ 2), [/ matemáticas] y [matemáticas] O (\ log n) [/ matemáticas]?

¿Cuáles son algunas habilidades de programación, algoritmos o marcos que se ven muy bien pero que son muy simples?

¿Cuál es el algoritmo de aprendizaje automático más útil para Google?

¿Podemos tener un árbol binario cuyo recorrido posterior y posterior sea el mismo?

Al modelar un autómata determinista de estado finito, ¿qué algoritmo de recorrido gráfico debe usarse?

¿Son factibles los problemas NP-difíciles?

¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?

¿Cuál será la complejidad temporal de la relación de recurrencia T (n-1) + T (n-2) + c?

¿Cómo puedo encontrar una incrustación plana de un gráfico plano?