Rekursion ist ein wirksamer Ansatz, um die Probleme wie komplexe mathematische Berechnungsaufgaben aufzulösen. Dies geschieht durch Verteilungen der Aufgabe in Unteraufgaben. Dieser Vorgang erfolgt durch die Teile und die Eroberung der Regel. Es ist keine obligatorische Sache, in Ihrem Programm immer einen Rekursionsprozess für die Wiederholung zu verwenden. Jedes Problem, das durch Rekursion gelöst wird, kann auch durch Iteration gelöst werden. Die rekursive Funktion ist jedoch effizienter bei der Programmierung, da der Code sehr kurz und leicht verständlich ist, während die gleiche Aufgabe ausgeführt wird. Der Rekursionsprozess wird immer für Probleme wie Suche und Sortieren, Baumtravers usw. empfohlen.
Notiz: Der Rekursionsprozess muss eine Kündigungsbedingung oder eine Basisklasse haben. Im zweiten Fall wird es zu unendlichen Ausführungen wie einer Iterationenschleife führen.
Syntax der rekursiven Funktion (C ++)
Die grundlegende Syntax der rekursiven Funktion ist gegeben als:
void recurse ()
// Anweisung (en)
recurse ();
Das Konzept besteht darin, ein Problem in viele kleinere Probleme zu teilen und dann alle Grundbedingungen hinzuzufügen, die die Rekursion stoppen können.
Grundzustand
In jedem rekursiven Programm wird die Lösung eines größeren Problems in kleineren Problemen ausgedrückt.
int fact (int n)
if (n < = 1) // base case
Rückkehr 1;
anders
"Andere Aussage"
Die Aussage/Bedingung von 'n < =1' is defined here, and hence the larger value can be solved by converting to a smaller one until the condition of the base case is fulfilled. If we don't use a base condition in our program, then there will be no ending point specifying the code, the infinite execution will occur. Here we will use a sample example.
Einfache Funktion
Betrachten Sie nun eine Stichprobe einer rekursiven Funktion, in der wir einen Wert im Hauptprogramm nehmen und an die Funktion weitergeben. In einer Funktion verwenden wir eine IF-ELSE-Anweisung. Der Teil der Anweisung "Wenn" bezieht sich auf die Basisbedingung, um die Funktion zu beenden oder die Ausgabe zu begrenzen. Dies wird angewendet, wenn der Wert weniger als 1 beträgt.
If (val < 1)
Während die Hauptfunktion auf den Teil der Funktion "else" angewendet wird. Dies ist die rekursive Funktion.
# Funktion (val - 1)
Der Wert wird vor und nach dieser Anweisung angezeigt, sodass die Ausgabe die Zahlen in absteigender und in aufsteigender Reihenfolge enthalten. Die Ausführung des Codes erfolgt über einen G ++ - Compiler. '-O' wird verwendet, um die Ausgabe eines Quellcode in einer Ausgabedatei zu speichern.
$ G ++ -O R1 R1.C
$ ./r1
Jetzt möchten wir die Auswirkung des Basiszustands in diesem Programm sehen. Wir werden den resultierenden Wert sehen; Wenn wir die IF-ELSE-Anweisung aus demselben Programm wie oben beschrieben entfernen, was wird die Ausgabe sein.
Sie können sehen, dass der Rest des Codes nach Entfernung der bedingten Anweisung unverändert bleibt. Nach dem Entfernen der Basisanweisung sieht die Ausgabe wie das folgende Bild aus. Für diese Ausführung wird es keinen definierten Endpunkt geben. Sie können feststellen, dass die Ausgabe eine unendliche Art von einzelnen Zahl ist.
Die gleiche Ausgabe dauert viele Zeilen, bis eine Nachricht von Core Dump angezeigt wird.
Rekursion arbeiten
Angenommen, ein Programmierer ist bereit, die Summe der ersten n -Zahlen zu bestimmen. Es gibt viele Möglichkeiten, die Summe zu bestimmen, aber die einfachste ist, die Zahlen zu fügen, indem sie von 1 zu n beginnen. Die Funktion sieht also so aus:
F (n) = 1+2+3+4+5+…+n
Das obige Beispiel ist die einfache Zugabe der Zahlen. Der zweite Ansatz befasst sich mit der Verwendung einer rekursiven Funktion.
F (n) = 1 n = 1
F (n) = n + f (n-1) n> 1
Jetzt können Sie auf den Unterschied zwischen beiden Ansätzen hinweisen. Im zweiten Ansatz ist f () eine grundlegende Unähnlichkeit, wie sie selbst genannt wird.
Rekursion ist von zwei Arten. Einer ist eine direkte Rekursion. Der zweite ist eine indirekte Rekursion. Eine Funktion wird als indirekt rekursiv bezeichnet, wenn sie einen Funktionsaufruf für eine andere Funktion hat und dass andere Funktion die erste Funktion direkt oder indirekt aufruft. Eine Probe für die direkte Rekursion wird dargestellt als:
Int f (int n)
F (n);
// ein Code
Während eine Probe für die indirekte Rekursion dargestellt wird als:
void f (int n)
F1 ();
void f1 (int n)
F();
zurückkehren;
Wir werden nun beide Arten von rekursiven Funktionen anhand einiger grundlegender Beispiele näher erläutern.
Direkte Rekursion
Beispiel 1
Dieses Beispiel befasst sich mit der Berechnung der Fibonacci -Serie. Wieder ist das Konzept das gleiche; Eine bedingte Aussage wird hier verwendet, um den Zustand zu stoppen; Der Wert sollte gleich Null sein. Andernfalls gibt es 1 oder 2 zurück, wenn der Wert gleich 1 oder 2 ist, 1 zurückgibt 1. Da diese Serienbildung 2 Zahlen benötigt, sollte die im Hauptprogramm verwendete Zahl größer als 2 sein. Die Aussageformel für den Fibonacci ist in der Kunstkunst der Bedingung geschrieben. Dies ist hauptsächlich die Rekursion des Programms.
# Funktion (val - 1) + Funktion (val - 2))
Während die Hauptfunktion den Funktionsaufruf initiiert, der den Wert umgeht. Dieser Wert ist eine Zahl bis zu der die Ausgabe sein sollte. Der Ausgang kann durch einen G ++ - Compiler über den Linux -Terminal überprüft werden.
Beispiel 2
Dieses Beispiel befasst sich mit der faktoriellen Berechnung einer Zahl. Für diese Berechnung muss eine Zahl größer als 1 sein, daher haben wir hier einen Grundzustand angewendet. Wenn dieser Teil der Erklärung "If" erfüllt ist, wird das Programm beendet; Andernfalls wird die mathematische Operation auf die Nummer angewendet.
Val * function (val - 1)
Dies ist die Rekursionsfunktion, bei der die Antwort der Funktion erneut im Funktionsaufruf verwendet wird.
Der resultierende Wert ist unten angezeigt.
Indirekte Rekursion
Wir werden die gleiche Berechnung der faktoriellen Berechnung indirekt anwenden. Wie wir bereits beschrieben haben, nennen die Funktionen in indirekter Rekursion es nicht, sodass wir für diesen Zweck eine andere Funktion benötigen. Nehmen Sie ein Beispiel mit zwei Funktionen. In Funktion A wird die Rekursionsfunktion auf die gleiche Weise wie im vorherigen Beispiel deklariert, aber der Funktionsaufruf ist für die zweite Funktion, Funktion-B. Funktion B enthält dieselbe Berechnungsmethode und enthält den rekursiven Aufruf für Funktion A.
Im Hauptprogramm wird ein Funktionsaufruf zur Funktion a gemacht.
Wenn Sie die Ausgabe sehen, werden Sie feststellen.
Abschluss
'C ++ rekursive Funktion' hat viele Vorteile, da sie in den Such- und Sortierprozessen verwendet werden. Die Basiszustand spielt die Hauptaufgabe bei der Ausführung der Rekursion, da sie die Ausführung und die unendliche Ausführung einschränkt. Die häufig verwendeten Beispiele werden hier erläutert, um das Benutzerverständnis der Rekursion zu vermitteln.