Verständnis einer Rekursionsmethode

Hallo,

ich habe hier eine Methode die ich nicht so ganz nachvollziehen kann.

Wäre nett wenn mir das jemand Schritt fuer Schritt erklaeren wurdde, bin noch ziemlicher Anfänger...

static int f(int x, int y) {
if (x<2)
return 1;
else if (y<=2)
return 2;

else
return 2*f(x-2,y/2) + f(x-1,y+1);
}

und es soll dann f(6,4) als beispiel durchgefuehrt werden. welche werte ergeben sich bei den einzelnen schritten? und was ist das endergebnis?

danke!
 
Java:
static int f(int x, int y)
{
	if (x < 2) //ist x kleiner als 2...
		return 1; //gib 1 zurück
	else if (y <= 2) //... oder ist y kleiner oder gleich 2
		return 2; //gib 2 zurück
	else //sonst
		return 2 * f(x-2,y/2) + f(x-1,y+1); //rechne das da aus und gib es zurück
}

Das macht er. Habe jetzt ein wenig mit der Hand gerechnet und dann aufgehört, weil ich nicht verstehe was das bringen soll und mir die Formel ein wenig zu lang geworden ist.
 
Ja ich verstehe schon was ich ausrechnen soll... aber nicht wirklich was mir der Wert der ersten Ausrechnung zurück gibt...

also angenommen haben wir 4 für x und 6 für y

dann kriege ich ja in der letzten zeile:

2*f(4-2;6/2)+f(4-1;6+1) = 2*f(2;3)+f(5;7) ist es dann f(4;6)+f(5;7)=f(9;13)

richtig?

und dann fange ich wieder von vorne an und prüfe ob if (x < 2) //ist x kleiner als 2...
return 1; //gib 1 zurück
else if (y <= 2) //... oder ist y kleiner oder gleich 2
return 2; //gib 2 zurück

und wenn nicht dann führ eich eben noch mal die rechnung durch solange bis eben eine der ersten bedingungen erfüllt ist?
 
Nein. Die Methoden haben logischer weiße eine höhere Priorität als die Grundrechnungsarten.
 
2 * f(4 - 2, 6 / 2) + f(4 - 1, 6 + 1)
2 * f(2, 3) + f(3, 7)
2 * (2 * f(2 - 2, 3 / 2) + f(2 - 1, 3 + 1)) + (2 * f(3 - 2, 3 / 2) + f(3 - 1, 7 + 1))
2 * (2 * f(0, 1.5) + f(1, 4)) + (2 * f(1, 1.5) + f(2, 8))
2 * (2 * 1 + 1) + (2 * 1 + (2 * f(2 - 2, 8 / 2) + f(2 - 1, 8 + 1))
2 * 4 + 2 + (2 * f(0, 4) + f(1, 9))
8 + 2 + 2 * 1 + 1
8 + 2 + 2 + 1
10 + 3
13

Ich hoffe, jetzt habe ich mich nirgends verrechnet, die Methode ausgeführt habe ich nicht.
 
ahhhh danke!

sprich die returns in den ersten beiden fällen geben einfach den wert der funktion zurück? sprich selbst bei f(1;7) würde das programm solange laufen bis auch die bedingung für das y erfüllt ist oder würde es sosofrt den wert 1 zurück geben?
 
und wieso multiplizierst du in der dritten zeile die beiden teile der funktion?

muss man in dem falle das nicht jeweils für sich betrachten?
 
Zurück