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