Come convertire ricorsivo a iterativo

June 11

algoritmi ricorsivi sono quegli algoritmi che si possono chiamare come parte della loro soluzione. Queste funzioni spesso lavorano sui problemi che contengono una serie di identici sotto-problemi, come l'attraversamento di alberi o di calcolo fattoriale. chiamando ripetutamente la stessa funzione più e più in grado di rendere il lavoro lento, anche se si potrebbe fare di codifica più semplice. Per aumentare la velocità di esecuzione, è possibile ricreare algoritmi ricorsivi, come l'algoritmo fattoriale, in una leggermente più complicato algoritmo iterativo utilizzando cicli che verranno eseguiti molto più velocemente.

istruzione

1 Analizzare l'algoritmo ricorsivo. In questo esempio, si utilizzerà la soluzione ricorsiva per il problema fattoriale:

int fattoriale (int appunto) {

if (fatto == 0) {
ritornare 1;
}altro{
ritornare fatto * fattoriale (infatti - 1);
}
}

2 Decidere se eventuali argomenti di una funzione possono essere tenuti in variabili. Nell'esempio fattoriale, i risultati del fattoriale possono essere memorizzati in una variabile "total_factorial" per la durata di ogni iterazione. Questo esempio illustra l'algoritmo ricorsivo fattoriale e la variabile da utilizzare per l'argomento ricorsivo:

int total_factorial = 0:

3 Determinare una struttura ad anello. In C ++, ad esempio, il "while" funziona bene con iterazioni che hanno una lunghezza indeterminati. "Per" loop, invece, funziona bene quando un ciclo andrà per una durata rigorosa, rappresentato da un numero intero di qualche tipo. Per l'esempio fattoriale, un ciclo "for" funzionerà bene:

int fattoriale = 5;
int total_factorial = 0;

4 Determinare le condizioni di sosta. Solitamente, come nell'esempio fattoriale, la ricorsione terminerà quando una condizione è soddisfatta. In un ciclo interative, come il ciclo, è utile conoscere prima mano. Poiché si sa che a trovare il fattoriale di un numero "n" che si iterare n-1 volte (oltre allo zero), è possibile avviare in una sola ed eseguire fino a quando il numero fattoriale:

for (int i = 1; i <= fattoriale; i ++) {
if (i == 1) {
total_factorial = 1;
} altro{
totale fattoriale * = i;
}
}