Eu sou novo neste site e essa pergunta certamente não é de nível de pesquisa - mas tudo bem. Eu tenho um pouco de experiência em engenharia de software e quase nenhum no CSTheory, mas acho atraente. Para resumir uma longa história, gostaria de uma resposta mais detalhada para o seguinte, se esta pergunta for aceitável neste site.
Então, eu sei que todo programa recursivo tem um analógico iterativo e eu meio que entendo a explicação popular que é oferecida, mantendo algo semelhante à "pilha do sistema" e pressionando as configurações do ambiente como endereço de retorno, etc. .
Sendo um pouco mais concreto, eu gostaria de (formalmente) ver como alguém prova essa afirmação nos casos em que você tem uma função que cadeia . Além disso, e se houver algumas instruções condicionais que possam levar um a chamar um ? Ou seja, o potencial gráfico de chamada de função possui alguns componentes fortemente conectados.F i F j
Gostaria de saber como essas situações podem ser tratadas, digamos algum conversor recursivo para iterativo. E a descrição ondulada à qual me referi anteriormente é realmente suficiente para esse problema? Quero dizer então porque é que acho fácil remover a recursão em alguns casos. Em particular, remover a recursão do percurso de pré-encomenda de uma árvore binária é realmente fácil - é uma pergunta de entrevista padrão, mas remover a recursão no caso de pós-pedido sempre foi um pesadelo para mim.
O que realmente estou perguntando é perguntas
(1) Existe realmente uma prova mais formal (convincente?) De que a recursão pode ser convertida em iteração?
(2) Se essa teoria está realmente lá fora, então por que acho que, por exemplo, iteratizar a pré-encomenda mais fácil e a pós- encomenda mais difícil? (além da minha inteligência limitada)