Soy nuevo en este sitio y esta pregunta ciertamente no tiene un nivel de investigación, pero bueno. Tengo un poco de experiencia en ingeniería de software y casi ninguno en CSTheory, pero me parece atractivo. Para resumir, quisiera una respuesta más detallada a lo siguiente si esta pregunta es aceptable en este sitio.
Entonces, sé que cada programa recursivo tiene un análogo iterativo y entiendo la explicación popular que se le ofrece al mantener algo similar a la "pila del sistema" y presionar la configuración del entorno como la dirección de retorno, etc. Encuentro este tipo de manual .
Siendo un poco más concreto, me gustaría ver (formalmente) cómo se prueba esta afirmación en los casos en que tiene una función que invoca la cadena . Además, ¿qué pasa si hay algunas declaraciones condicionales que podrían hacer que un F i llame a algún F j ? Es decir, el gráfico de llamada de función potencial tiene algunos componentes fuertemente conectados.
Me gustaría saber cómo se pueden manejar estas situaciones, digamos un convertidor recursivo a iterativo. ¿Y la descripción manual que mencioné anteriormente es realmente suficiente para este problema? Quiero decir, entonces, ¿por qué es fácil eliminar la recursión en algunos casos? En particular, eliminar la recursividad del recorrido previo al pedido de un árbol binario es realmente fácil: es una pregunta estándar de la entrevista, pero eliminar la recurrencia en el caso de un pedido posterior siempre ha sido una pesadilla para mí.
Lo que realmente estoy preguntando son preguntas
(1) ¿Existe realmente una prueba más formal (convincente?) De que la recursión se puede convertir en iteración?
(2) Si esta teoría está realmente ahí afuera, entonces ¿por qué es que encuentro, por ejemplo, iterar preordenar más fácilmente y postorder tan difícil? (aparte de mi inteligencia limitada)