Java Reference
In-Depth Information
(ohne Seiteneffekte) die Anzahl an Körnern, die sich aktuell im Maul des Hamsters befinden.
int anzahlKoernerR() {
if (!maulLeer()) {
gib();
int anzahl = anzahlKoernerR();
nimm(); // zur Vermeidung von Seiteneffekten!
return anzahl + 1;
} else {
return 0;
}
}
Innerhalb der Funktion anzahlKoernerR wird eine lokale Variable anzahl definiert. Nun hatten
wir ja in Kapitel 14.8.1 gelernt, dass die Lebensdauer einer lokalen Variablen bei ihrer Definition
beginnt und endet, wenn der Block, in dem sie definiert wurde, verlassen wird. Im obigen Beispiel
wird nun während der Lebensdauer der Variablen anzahl die Funktion anzahlKoernerR rekursiv
aufgerufen. Falls der Hamster noch weitere Körner im Maul hat, wird im Programmablauf erneut
die Stelle erreicht, an der die Variable anzahl definiert wird. An dieser Stelle wird nun nicht mit der
alten Variablen anzahl „gearbeitet“. Vielmehr wird eine weitere Inkarnation 1 der Variablen anzahl
erzeugt und in dieser Funktionsinkarnation mit dieser neuen Variableninkarnation „gearbeitet“ D.h.
jede Funktionsinkarnation arbeitet mit einem eigenen Satz von lokalen Variablen. Insbesondere ist
es einer Funktionsinkarnation nicht möglich, auf lokale Variablen anderer Funktionsinkarnationen
zuzugreifen.
17.6 Rekursive Funktionen mit Parametern
Rekursive Funktionen besitzen häufig Parameter. Beim rekursiven Aufruf der Funktion wird dabei
im Allgemeinen der neuen Inkarnation ein veränderter Parameterwert übergeben. Außerdem wird
der Parameterwert in der Abbruchbedingung der Rekursion verwendet.
Die im Folgenden definierte Prozedur vorR mit dem formalen Parameter anzahl lässt den Hamster
so viele Felder nach vorne laufen, wie ihr beim Aufruf als aktueller Parameterwert übergeben wird,
maximal jedoch bis zur nächsten Mauer.
void vorR(int anzahl) {
if ((anzahl > 0) && vornFrei()) {
vor();
vorR(anzahl - 1);
}
}
Wird die Funktion bspw. mit dem aktuellen Parameterwert 2 aufgerufen und ist die nächste Mauer
mindestens 3 Felder vom Hamster entfernt, dann erzeugt die erste Inkarnation der Prozedur eine
zweite Inkarnation und übergibt dieser als aktuellen Parameter den Wert 1 . Während der Abarbeitung
der zweiten Inkarnation wird eine dritte Inkarnation der Funktion erzeugt; diesmal wird ihr der Wert
1 Im Falle von Variablen spricht man auch von Instanzen anstelle von Inkarnationen.
 
Search WWH ::




Custom Search