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