Sono nuovo di questo sito e questa domanda non è certo a livello di ricerca, ma vabbè. Ho un piccolo background nell'ingegneria del software e quasi nessuno in CSTheory, ma lo trovo attraente. Per farla breve, vorrei una risposta più dettagliata a quanto segue se questa domanda è accettabile su questo sito.
Quindi, so che ogni programma ricorsivo ha un analogo iterativo e capisco la spiegazione popolare che gli viene offerta mantenendo qualcosa di simile allo "stack di sistema" e spingendo le impostazioni dell'ambiente come l'indirizzo di ritorno ecc. Trovo questo tipo di handwavy .
Essendo un po 'più concreto, vorrei (formalmente) vedere come si dimostra questa affermazione nei casi in cui si ha una funzione che invoca la catena . Inoltre, cosa succede se ci sono alcune istruzioni condizionali che potrebbero portare un F ho effettuare una chiamata a un certo F j ? Cioè, il potenziale grafico di chiamata di funzione ha alcuni componenti fortemente connessi.
Vorrei sapere come possono essere gestite queste situazioni, diciamo un convertitore ricorsivo a iterativo. E la descrizione fatta a mano a cui ho fatto riferimento in precedenza, è davvero sufficiente per questo problema? Intendo allora perché trovo facile rimuovere la ricorsione in alcuni casi. In particolare, rimuovere la ricorsione dall'attraversamento del pre-ordine di un albero binario è davvero facile: è una domanda standard di intervista, ma rimuovere la ricorsione in caso di ordine postale è sempre stato un incubo per me.
Quello che sto davvero chiedendo sono domande
(1) Esiste davvero una prova più formale (convincente?) Che la ricorsione può essere convertita in iterazione?
(2) Se questa teoria è davvero in circolazione , allora perché trovo, ad esempio, più facile l' iterazione del preordine e il postordine così difficile? (diverso dalla mia intelligenza limitata)