Was gibt folgende Funktion aus?

Cherrycoke

Mitglied
Hallo Community,

ich habe folgende Funktion aufgeschrieben:

Code:
int z = 0;

int foo(int x, int y){
printf("x=%d, y=%d\n", x, y);
if (x < y)
		z = 1 + foo(++x, --y);
printf("x=%d, y=%d, z=%d\n", x, y, z);
return z;
}

Was wird denn nun ausgegeben, wenn ich dieser Funktion mit den Parametern 3 und 7 aufrufe?

Ich hätte gesagt:

x = 3, y = 7
x = 4, y = 6
x = 5, y = 5
x = 5, y = 5, z = 0
x = 4, y = 6, z = 1
x = 3, y = 7, z = 2

Wenn ich diese Funktion jedoch auf meinem Rechner aufrufe, ergibt die Ausgabe:

x = 3, y = 7
x = 4, y = 6
x = 5, y = 5
x = 5, y = 5, z = 0
x = 5, y = 5, z = 1
x = 4, y = 6, z = 2

Leider verstehe ich nicht, wie der Computer auf diese Ausgabe kommt. Ich verstehe nicht, wie die Zeile "x = 5, y = 5, z = 1" zustande kommt.

Danke für eure Hilfe!
 
Hallo,

bei der zweiten Ausgabe des rekursiven Aufrufs foo(4, 6) wurden die Variablen x und y schon in- bzw. dekrementiert. Deine Voraussage würde stimmen, wenn die Variablen nicht verändert werden würden, also der rekursive Aufruf z.B. so aussehen würde:
C:
		z = 1 + foo(x+1, y-1);

Grüße,
Matthias
 
Zurück