Eine Funktion kann nicht nur eine andere Funktion aufrufen, sondern auch sich selbst. Dieser Vorgang wird Rekursion oder rekursiver Aufruf genannt. Nur die Funktion main() bildet hier eine Ausnahme, sie darf nicht von anderen Funktionen noch aus sich selbst heraus sondern nur vom Betriebssystem aufgerufen werden.
Gegen die Verwendung einer rekursiven Funktion ist nichts zu sagen, sie ist lediglich etwas langsamer und verbraucht mehr Arbeitsspeicher als eine Schleifen-Lösung. Dafür ist der Programmcode kompakter und übersichtlicher. Sollten jedoch bei der Ausführung Probleme mit der Geschwindigkeit auftreten, ist eine eine rekursive Funktion leicht durch eine Schleife zu ersetzen.
[sc name=“adsense_InText_ad“]
Genau wie eine Schleife benötigt eine rekursive Funktion einen Zähler und eine Bedingung die festlegt, wann der Selbstaufruf abgebrochen wird, weil die Bedingung erfüllt ist. Die allgemeine Syntax sieht so aus:
Rückgabe-Typ Funktionsname (Parameter) { Auszuführender Befehl; Vorwärtszähler; Test-Bedingung für den Ausstieg; }
Bei jedem Durchlauf wird der Wert des Zählers geändert und praktisch an die Funktion zurückgegeben. Das folgende Programm zeigt ein Beispiel:
Übung: Rekursive Funktion
Programm: rekursiv.cpp
#include <iostream> using namespace std; //Deklaration von zwei Funktions-Prototypen int berechneFakultaet (int, int); int fakultaet (int); int main () { berechneFakultaet (1,8); //Funktionsaufruf system("pause"); return 0; } //Rekursive Funktion fuer den ersten Prototypen int berechneFakultaet (int num, int max) { cout << "Fakultaet von " << num << ": "; cout << fakultaet (num) << endl; num++; if (num > max) return 0; //Ausgang else berechneFakultaet (num, max); } //Rekursive Funktion fuer den zweiten Prototypen int fakultaet (int n) { int ergebnis; if (n==1) ergebnis = 1; else ergebnis = (fakultaet (n-1) * n); //Runterzaehlen return ergebnis; }
Speichern Sie das Programm, kompilieren Sie es anschließend und schauen Sie sich das Ergebnis an. Ausgegeben wird eine Liste mit Fakultäten der Zahlen 1 bis 8 (Beispiel: Fakultät 3 ist 3 x 2 x 1 = 6).
Dieser Artikel ist Teil unseres kostenlosen Workshops “C++ Programmieren lernen” – Geeignet für Einsteiger und Fortgeschrittene. Machen auch Sie mit und lernen Sie in 50 Artikeln, wie Sie Programme selbst schreiben!
Artikelbild: Fotolia / bramgino