Java Reference
In-Depth Information
17.2.1 Inkarnation
Wird während der Ausführung eines Programms eine Funktion aufgerufen, dann spricht man auch
davon, dass eine
Inkarnation
dieser Funktion erzeugt wird. Die Inkarnation wird wieder zerstört,
wenn die Funktion vollständig abgearbeitet worden ist. Schauen Sie sich dazu folgendes Programm
an:
void main() {
sammle();
laufeUndSammle();
}
void laufeUndSammle() {
while (vornFrei()) {
vor();
sammle();
}
}
void sammle() {
while (kornDa()) {
nimm();
}
}
Beim Aufruf dieses Programms wird zunächst einmal eine Inkarnation der main-Prozedur erzeugt.
In der main-Prozedur führt der Aufruf der Prozedur
sammle
zur Erzeugung einer Inkarnation dieser
Prozedur. Nach der Abarbeitung der sammle-Prozedur wird diese Inkarnation wieder zerstört. An-
schließend wird durch den Aufruf der Prozedur
laufeUndSammle
eine Inkarnation dieser Prozedur
erzeugt. Während der Abarbeitung der while-Schleife innerhalb der Prozedur wird jedes Mal erneut
eine Inkarnation der sammle-Prozedur erzeugt und zerstört. Hat der Hamster eine Wand erreicht,
endet die laufeUndSammle-Prozedur, d.h. die Inkarnation dieser Prozedur wird zerstört. Damit ist
aber das gesamte Programm beendet, sodass auch die Inkarnation der main-Prozedur zerstört werden
kann.
17.2.2 Rekursion
Nun kann der Begriff der
rekursiven Funktion
exakt definiert werden. Eine Funktion ist
rekursiv
defi-
niert, wenn zu einem Zeitpunkt während der Programmausführung zwei oder mehrere Inkarnationen
dieser Funktion existieren (können).
Schauen wir uns einmal die Prozedur
hinUndZurueckR
an:
1
void hinUndZurueckR() {
2
if (vornFrei()) {
vor();
3
hinUndZurueckR();
// rekursiver Aufruf
4
vor();
5
} else {
6
Search WWH ::
Custom Search