Java Reference
In-Depth Information
17.2.3 Rekursionstiefe
Die Rekursionstiefe einer Funktion ist definiert als die Anzahl der gleichzeitig existierenden Inkar-
nationen einer Funktion minus 1.
Rekursionstiefe 0 bedeutet somit, dass der aktuelle Aufruf einer Funktion nicht während der Aus-
führung der gleichen Funktion erfolgt ist. Dies ist bei der Ausführung der obigen Prozedur hin-
UndZurueckR der Fall, wenn sich der Hamster beim Start des Programms direkt vor einer Mauer
befindet. Befindet sich der Hamster beim Aufruf des Programms jedoch bspw. drei Felder vor einer
Mauer, so erreicht die Prozedur hinUndZurueckR eine Rekursionstiefe von 2.
17.3 Veranschaulichung des Rekursionsprinzips
In diesem Abschnitt wird das Rekursionsprinzip zunächst anhand zweier Beispiele veranschaulicht.
Außerdem wird eine Korrelation zwischen einem bestimmten Typ von iterativen Prozeduren und
rekursiven Prozeduren herausgearbeitet. Schließlich wird noch das Problem der Endlosrekursion
diskutiert.
17.3.1 Prozedur hinUndZurueckR
Schauen wir uns nun einmal genauer an, was passiert, wenn die Prozedur hinUndZurueckR aufge-
rufen wird. Abbildung 17.1 enthält mehrere mögliche Ausgangssituationen.
void hinUndZurueckR() {
if (vornFrei()) {
vor();
hinUndZurueckR();
// rekursiver Aufruf
vor();
} else {
linksUm();
linksUm();
}
}
void main() {
hinUndZurueckR();
}
(a)
(b)
(c)
Abbildung 17.1: Rekursionsbeispiel
Zunächst betrachten wird den Fall, dass der Hamster anfangs bereits vor einer Mauer steht (Abbil-
dung 17.1 (a)). In diesem Fall wird direkt der else-Teil der Funktion aufgerufen, der Hamster dreht
sich also um, und das Programm ist korrekt beendet.
Search WWH ::




Custom Search