Unterschied zwischen Rekursion und Iteration

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 4 Kann 2024
Anonim
Rekursion einfach erklärt - Funktionen in Java 5 ● Gehe auf SIMPLECLUB.DE/GO & werde #EinserSchüler
Video: Rekursion einfach erklärt - Funktionen in Java 5 ● Gehe auf SIMPLECLUB.DE/GO & werde #EinserSchüler

Inhalt


Sowohl Rekursion als auch Iteration führen den Befehlssatz wiederholt aus. Rekursion ist, wenn sich eine Anweisung in einer Funktion wiederholt aufruft. Die Iteration erfolgt, wenn eine Schleife wiederholt ausgeführt wird, bis die steuernde Bedingung falsch wird. Der Hauptunterschied zwischen Rekursion und Iteration besteht darin, dass a Rekursion ist ein Prozess, der immer auf eine Funktion angewendet wird. Das Wiederholung wird auf den Befehlssatz angewendet, der wiederholt ausgeführt werden soll.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

VergleichsbasisRekursionWiederholung
BasicDie Anweisung in einem Funktionskörper ruft die Funktion selbst auf.Ermöglicht die wiederholte Ausführung des Befehlssatzes.
FormatIn der rekursiven Funktion wird nur die Beendigungsbedingung (Basisfall) angegeben.Die Iteration umfasst die Initialisierung, Bedingung, Ausführung der Anweisung innerhalb der Schleife und das Aktualisieren (Inkrementieren und Dekrementieren) der Steuervariablen.
BeendigungIm Hauptteil der Funktion ist eine bedingte Anweisung enthalten, die die Rückgabe der Funktion erzwingt, ohne dass ein Rekursionsaufruf ausgeführt wird.Die Iterationsanweisung wird wiederholt ausgeführt, bis eine bestimmte Bedingung erreicht ist.
BedingungWenn die Funktion nicht zu einer Bedingung konvergiert, die aufgerufen wird (Basisfall), führt dies zu einer unendlichen Rekursion.Wenn die Kontrollbedingung in der Iterationsanweisung niemals falsch wird, führt dies zu einer unendlichen Iteration.
Unendliche WiederholungEine unendliche Rekursion kann das System zum Absturz bringen.Endlosschleife verwendet wiederholt CPU-Zyklen.
AngewandtRekursion wird immer auf Funktionen angewendet.Iteration wird auf Iterationsanweisungen oder "Schleifen" angewendet.
StapelDer Stack wird verwendet, um bei jedem Funktionsaufruf den Satz neuer lokaler Variablen und Parameter zu speichern.Verwendet keinen Stack.
OverheadRekursion hat den Overhead von wiederholten Funktionsaufrufen.Kein Overhead durch wiederholten Funktionsaufruf.
GeschwindigkeitLangsam in der Ausführung.Schnell in der Ausführung.
Größe des CodesRekursion reduziert die Größe des Codes.Durch die Iteration wird der Code länger.


Definition von Rekursion

C ++ ermöglicht es einer Funktion, sich innerhalb ihres Codes selbst aufzurufen. Das heißt, die Definition der Funktion besitzt einen Funktionsaufruf für sich. Manchmal heißt es auch „zirkuläre Definition“. Die von der Funktion verwendeten lokalen Variablen und Parameter werden bei jedem Aufruf der Funktion neu erstellt und oben im Stapel gespeichert. Jedes Mal, wenn eine Funktion sich selbst aufruft, wird jedoch keine neue Kopie dieser Funktion erstellt. Die rekursive Funktion reduziert die Größe des Codes nicht wesentlich und verbessert nicht einmal die Speicherauslastung, tut jedoch einige im Vergleich zur Iteration.

Um die Rekursion zu beenden, müssen Sie eine select-Anweisung in die Definition der Funktion einfügen, um die Rückgabe der Funktion zu erzwingen, ohne sich selbst rekursiv aufzurufen. Das Fehlen der select-Anweisung in der Definition einer rekursiven Funktion lässt die Funktion einmal in unendlicher Rekursion aufgerufen werden.


Lassen Sie uns die Rekursion mit einer Funktion verstehen, die die Fakultät der Zahl zurückgibt.

int factorial (int num) {int answer; if (num == 1) {return 1; } else {answer = Fakultät (num-1) * num; // rekursiver Aufruf} return (answer); }

Im obigen Code zeigt die Anweisung in else die Rekursion, da die Anweisung die Funktion factorial () aufruft, in der sie sich befindet.

Definition von Iteration

Iteration ist ein Vorgang, bei dem der Befehlssatz wiederholt ausgeführt wird, bis die Bedingung in der Iterationsanweisung falsch wird. Die Iterationsanweisung beinhaltet die Initialisierung, den Vergleich, die Ausführung der Anweisungen innerhalb der Iterationsanweisung und schließlich die Aktualisierung der Steuervariablen. Nachdem die Steuervariable aktualisiert wurde, wird sie erneut verglichen und der Prozess wiederholt sich, bis sich herausstellt, dass die Bedingung in der Iterationsanweisung falsch ist. Die Iterationsanweisungen lauten "for" -Schleife, "while" -Schleife, "do-while" -Schleife.

Die Iterationsanweisung verwendet keinen Stapel zum Speichern der Variablen. Daher ist die Ausführung der Iterationsanweisung im Vergleich zur rekursiven Funktion schneller. Sogar die Iterationsfunktion hat nicht den Overhead von wiederholten Funktionsaufrufen, die ihre Ausführung auch schneller als die rekursive Funktion machen. Die Iteration wird beendet, wenn die Kontrollbedingung falsch wird. Das Fehlen einer Kontrollbedingung in der Iterationsanweisung kann zu einer Endlosschleife führen oder einen Kompilierungsfehler verursachen.

Lassen Sie uns die Iteration anhand des obigen Beispiels verstehen.

int Fakultät (int num) {int Antwort = 1; // muss initialisiert werden, da es vor seiner Initialisierung einen Garbage-Wert enthalten kann für (int t = 1; t> num; t ++) // Iteration {answer = answer * (t); return (antwort); }}

Im obigen Code gibt die Funktion die Fakultät der Zahl mithilfe einer Iterationsanweisung zurück.

  1. Rekursion ist, wenn sich eine Methode in einem Programm wiederholt aufruft, während Iteration ist, wenn ein Befehlssatz in einem Programm wiederholt ausgeführt wird.
  2. Eine rekursive Methode enthält einen Befehlssatz, eine Anweisung, die sich selbst aufruft, und eine Beendigungsbedingung, wohingegen Iterationsanweisungen Initialisierung, Inkrement, Bedingung, Befehlssatz in einer Schleife und eine Steuervariable enthalten.
  3. Eine bedingte Anweisung entscheidet über die Beendigung der Rekursion, und der Wert der Steuervariablen entscheidet über die Beendigung der Iterationsanweisung.
  4. Wenn die Methode nicht zu der Abbruchbedingung führt, geht sie in eine unendliche Rekursion über. Wenn die Steuervariable jedoch nie zum Beendigungswert führt, wird die Iterationsanweisung unendlich wiederholt.
  5. Eine unendliche Rekursion kann zu einem Systemabsturz führen, während eine unendliche Iteration CPU-Zyklen beansprucht.
  6. Die Rekursion wird immer auf die Methode angewendet, während die Iteration auf den Befehlssatz angewendet wird.
  7. Während der Rekursion erstellte Variablen werden im Stapel gespeichert, während für die Iteration kein Stapel erforderlich ist.
  8. Rekursion verursacht den Overhead von wiederholten Funktionsaufrufen, während Iteration keinen Funktionsaufruf-Overhead hat.
  9. Aufgrund des Funktionsaufrufs ist die Overhead-Ausführung der Rekursion langsamer, während die Ausführung der Iteration schneller ist.
  10. Durch Rekursion wird die Größe des Codes verringert, während durch Iterationen der Code länger wird.

Fazit:

Die rekursive Funktion ist einfach zu schreiben, aber im Vergleich zur Iteration sind sie nicht gut, wohingegen die Iteration schwer zu schreiben ist, ihre Leistung jedoch im Vergleich zur Rekursion gut ist.