Java Reference
In-Depth Information
Nun wird der Stapel von oben nach unten abgearbeitet.
PrAXISTIPP:
Auch die konkrete Abarbeitung der gestapelten Funktionsaufrufe
kann man sich hervorragend mit dem Debugger verdeutlichen.
Bild 5.21■
fak(0) bis fak(3) wurden ausgeführt und vom Stapel entfernt.
Zuerst wird
fak(0)
aufgerufen und vom Stapel genommen. Diese Funktion liefert den
Rückgabewert
1
, was im Moment uninteressant ist. Aber beim nächsten Aufruf (
fak(1)
)
gelangen wir in den
else
-Zweig. Und dort wird der Wert von
n
(
1
) mit dem Rückgabewert
von
fak(0)
(
1
) multipliziert. Das Ergebnis (
1
) ist der Rückgabewert von
fak(1)
.
Nun liegt
fak(2)
oben im Stapel. Und dort wird der Wert von
n
(
2
) mit dem Rückgabewert
von
fak(1)
(
1
) multipliziert. Das Ergebnis (
2
) ist der Rückgabewert von
fak(2)
. Jetzt ist
fak(3)
oben im Stapel und hier wird der Wert von
n
(
3
) mit dem Rückgabewert von
fak(2)
(
2
) multipliziert. Das Ergebnis (
6
) ist der Rückgabewert von
fak(3)
. So geht es weiter. Bei
fak(4)
wird der Wert von
n
(
4
) mit dem Rückgabewert von
fak(3)
(
6
) multipliziert. Das
Ergebnis (
24
) ist der Rückgabewert von
fak(4)
. Der letzte Funktionsaufruf auf dem Stapel
nimmt den Wert
5
für
n
und multipliziert ihn mit
24
. Und diese Rückgabe von
120
ist letzt-
endlich das, was der Aufrufer von
fak(5)
bekommt und verarbeiten kann. Der Stack ist jetzt
auch wieder leer.
HInWEIS:
Etwas weiter oben wurde schon darauf hingewiesen, dass Schleifen
und rekursive Aufrufe ot Alternativen für die gleichen Aufgaben darstellen.
Rekursive Aufrufe sind aber in der Regel nicht gut für die Performance eines
Skripts. Meist ist es besser, wenn Sie stattdessen eine Schleife verwenden.
Allerdings ist dieses Argument hinfällig, wenn Sie zeitverzögerte rekursive Auf-
rufe einsetzen, wie es bei Animationen der Fall sein wird.
Search WWH ::
Custom Search