Java Reference
In-Depth Information
linksUm();
7
linksUm();
8
}
9
10
}
11
12
void main() {
13
hinUndZurueckR();
14
}
Tatsächlich kann während der Ausführung der Prozedur
hinUndZurueckR
die Prozedur in Zeile 4
ein weiteres Mal aufgerufen werden, was dazu führt, dass mehrere Inkarnationen dieser Prozedur
gleichzeitig existieren. Folglich ist die Prozedur
hinUndZurueckR
rekursiv.
Die Prozedur
hinUndZurueckR
ist ein Beispiel für eine
direkte Rekursion
. Man spricht von direkter
Rekursion, wenn sich eine Funktion selbst erneut aufruft. Dementsprechend bezeichnet man als
in-
direkte Rekursion
das Phänomen, dass von einer Funktion mehrere Inkarnationen existieren, obwohl
sich diese nicht selber aufruft. Das folgende Programm gibt ein Beispiel für indirekte Rekursion.
void hinUndZurueckIR() {
if (vornFrei()) {
laufe();
} else {
linksUm();
linksUm();
}
}
void laufe() {
vor();
hinUndZurueckIR();
// indirekter rekursiver Aufruf
vor();
}
void main() {
hinUndZurueckIR();
}
Während der Ausführung der Prozedur
hinUndZurueckIR
, d.h. während der Existenz einer Inkar-
nation von der Prozedur, kann die Prozedur
laufe
aufgerufen werden, die einen erneuten Aufruf der
Prozedur
hinUndZurueckIR
, also die Erzeugung einer weiteren Inkarnation der Prozedur, bewirkt.
Übrigens ist das Prinzip der Rekursion nicht auf Funktionen beschränkt. In der Informatik und der
Mathematik wird es auch an vielen anderen Stellen eingesetzt. Wir haben es sogar schon einige Male
genutzt. Schauen Sie sich bspw. einmal die Abbildung 9.3 an. Diese enthält ein Syntaxdiagramm,
das boolesche Ausdrücke rekursiv definiert: Innerhalb des Syntaxdiagramms „boolescher Ausdruck“
tritt nämlich der „boolesche Ausdruck“ selbst wieder als Nicht-Terminalsymbol auf.
Search WWH ::
Custom Search