mercredi 25 février 2015

Rekursion von Hand durchführen

Hallo,



ich habe folgenden Code:


Java Code:






  1. static int f(int x, int y) {



  2. if (y>=4)



  3. return 1;



  4. else if (x<=1)



  5. return 2;



  6. else



  7. return 3*f(x-2,y+1)-f(x,y+1);



  8. }







und soll als Startwert f(3, -1) nehmen und rauskommen soll dann:

1. Aufruf: f(3,-1) 2. Aufruf: f(1,0) 3. Aufruf: f(3,0)

4. Aufruf: f(1,1) 5. Aufruf: f(3,1) 6. Aufruf: f(1,2)

7. Aufruf: f(3,2) 8. Aufruf: f(1,3) 9. Aufruf: f(3,3)

10. Aufruf: f(1,4) 11. Aufruf: f(3,4)

Ich habe das von Hand nachgerechnet für den zweiten Aufruf:

Man hat x = 3 und y = -1 und setzt diese Werte in die Funktionen nach dem Return ein also:

3*f(3-2, -1+1)-f(3, -1+1) und da kommt raus:

3*f(1,0)-f(3,0) = f(3,0)-f(3,0) = f(0,0) :bahnhof:

Kommt irgendwie nicht dasselbe bei raus, ich hab auch schon ein paar andere Aufrufe versucht zu rechnen alle Möglichkeiten versucht irgendwie diese Werte auch so hinzukriegen aber es scheint als würde der Fehler woanders stecken. Ich hab das Programm auch schon am Rechner mal ausprobiert und die vorgegebenen Werte stimmen wirklich. Wie rechnet man das nun von Hand und müsste das Programm nicht abbrechen wenn ein return ohne f(x,y) kommt und warum bricht er bei 11 erst ab und nicht schon bei 2 da dort ja auch schon eine Bedingung ohne das "Rekursionsreturn" erfüllt ist. ???:L



Danke für die Hilfe





Rekursion von Hand durchführen

0 commentaires:

Enregistrer un commentaire