Mittwoch, 16. Dezember 2009

 

Aufrufstack

Betrachten Sie folgendes Beispiel:


 1:/**
2: * java-stoff: speicher.Fact.java
3: *
4: * 16.12.2009, Harald R. Haberstroh
5: */
6:package speicher;
7:
8:import java.util.Scanner;
9:
10:/**
11: * Faktorielle rekursiv als Demo für den Aufruf-Stack.
12: *
13: * @author Harald R. Haberstroh (hp)
14: *
15: */
16:public class Fact {
17:
18: public static int fac(int n) {
19: int ret = 0;
20: if (n < 0) {
21: throw new IllegalArgumentException("n muss größer oder gleich Null sein");
22: }
23: if (n <= 1) {
24: ret = 1;
25: } else {
26: ret = n * fac(n - 1);
27: }
28: return ret;
29: }
30: /**
31: * @param args
32: */
33: public static void main(String[] args) {
34: Scanner in = new Scanner(System.in);
35: int n = 0;
36: int f = 0;
37: while (in.hasNextInt()) {
38: n = in.nextInt();
39: f = fac(n);
40: System.out.printf("%d! = %d\n", n, f);
41: }
42: }
43:}

Uns interessiert die Funktionsweise der Aufrufs der rekursiven Funktion fac(). Arbeiten Sie das Programm am Papier ab. Beginnen Sie mit Zeile 39 und dem Wert n = 5. Skizzieren Sie den Aufrufstack, wenn Sie in Zeile 24 angelangt sind.

Labels: , , ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]