Rekursive Algorithmen sind die Algorithmen , die sich selbst als Teil ihrer Lösung nennen kann . Diese Funktionen arbeiten oft auf Probleme, die eine Reihe von identischen Sub- Probleme , wie Baum -Traversal oder faktorielle Berechnung enthalten . Immer wieder fordern die gleiche Funktion über und über langsame Arbeit machen kann , auch wenn es vielleicht machen Codierung einfacher. Um die Ausführungsgeschwindigkeit zu erhöhen, können Sie neu rekursive Algorithmen , wie die Fakultät Algorithmus in eine etwas kompliziertere iterativen Algorithmus mit Schleifen, die viel schneller ausgeführt werden . Anleitung
1
Analysieren Sie den rekursiven Algorithmus . In diesem Beispiel verwenden Sie die rekursive Lösung für das Problem Fakultät : Fakultät
int (int Tatsache ) {
if ( Tatsache == 0) { return 1; } else {return Tatsache * Fakultät (fact - 1 );}}
2
Entscheiden Sie, ob alle Argumente der Funktion in Variablen gehalten werden kann . In der faktoriellen Beispielsweise können die Ergebnisse der faktoriellen in einer Variablen " total_factorial " für die Dauer einer Iteration gespeichert werden. Dieses Beispiel zeigt die rekursive Fakultät Algorithmus und die Variable für die rekursive Argument verwenden :
int total_factorial = 0:
3
Bestimmen Sie eine Loop-Struktur . In C + +, zum Beispiel , arbeitet die " while"-Schleife auch mit Iterationen , die einen unbestimmten Länge haben. " Für "-Schleifen , auf der anderen Seite , gut funktionieren, wenn eine Schleife wird eine strikte Dauer, durch eine ganze Zahl von einer Art repräsentiert gehen . Für die Fakultät Beispiel wird eine " for"-Schleife gut funktionieren :
int factorial = 5; int total_factorial = 0;
4
Bestimmen stoppen Bedingungen . Normalerweise , wie in der Fakultät Beispiel wird die Rekursion zu beenden, wenn eine Bedingung erfüllt ist . In einem iterativen Schleife , wie die for-Schleife , hilft es, vor der Hand wissen . Da Sie wissen, dass bei der Suche die Fakultät einer Zahl "n" , dass Sie n- 1 mal (außer Null) durchlaufen , können Sie an einem starten und laufen bis zum factorial Anzahl :
for (int i = 1; i < = factorial ; i + + ) {if ( i == 1) { total_factorial = 1; } else {total factorial * = i; }}