Java Reference
In-Depth Information
Für den Rekursivaufruf, bei dem die Reihenfolge uninteressant ist, deinieren wir eine glo-
bale Variable
i
, die rekursiv erhöht werden soll. Die Funktion
fkt()
initialisiert die Varia-
ble
i
mit dem Wert 0 und rut dann
rekFkt()
auf. Das ist die eine rekursive Funktion. In
dem Beispiel werden einfach in einer Funktion Zufallszahlen berechnet und damit wird die
globale Variable
i
so lange erhöht, bis der Wert von
i
größer als 2 ist. Danach springt der
Programmluss wieder in die Funktion
fkt()
und der Wert der globalen Variable
i
wird
ausgegeben. Grundsätzlich ist also an der Stelle nur die Tatsache interessant, dass sich eine
Funktion wieder selbst aufrut.
Bei der Berechnung der Fakultät in der Funktion
fak()
sollten wir aber genauer hinsehen.
Die Funktion besitzt einen Übergabeparameter und einen Rückgabewert und da werden
sich bei rekursiven Aufrufen spannende Dinge abspielen.
Wenn die Funktion per Hyperlink aufgerufen wird (
fak(5)
), hat der Parameter
n
den Wert
5. Nun wird im Inneren der Funktion geprüt, ob der Wert von
n
0 ist. Das ist nicht der Fall
und der
else
-Zweig wird „ausgeführt“, wobei „ausgeführt“ hier eben bedeutet, dass der
Aufruf der Funktion auf den Stack gelegt wird, mit dem Wert 5 für den Parameter. Und der
else
-Zweig sorgt dafür, dass die nächste „Karte“ auf dem Stapel der Aufruf von
fak(4)
ist
(f
ak(n - 1)
). Dann kommen
fak(3)
,
fak2()
,
fak(1)
und zuletzt
fak(0)
auf den Stapel.
7
PrAXISTIPP:
Für Leser mit Vorkenntnissen - diese Stapelung auf dem Stack
kann man hervorragend in einem sogenannten Debugger beobachten
7
. Firebug
besitzt so einen Debugger. Sie öfnen das Register
Skript
und setzen mit einem
Klick auf den linken Rand der Skriptanzeige einen Haltepunkt in der ersten Zeile
der Funktion. Auf der rechten Seite sehen Sie das Register
Stack
. Wenn Sie dann
mit der Taste
F10
das Skript zeilenweise weiter ausführen, sehen Sie das Wachsen
des Stapels und die Reihenfolge, wie die Funktionsaufrufe dort abgelegt werden.
Bild 5.20■
Oben im Stapel liegt fak(0) und ganz unten fak(5).
7
Das Thema Debugging wird noch ausführlich im Buch behandelt.
Search WWH ::
Custom Search