Hallo.
Ich habe folgendes Problem. Ich habe folgende Methode implementiert:
public static int rekursion (int cnt){
if (cnt>0) rekursion(–cnt);
System.out.println("cntReturned: " + cnt);
return cnt;
}
Ergebnis des Aufrufes ist wie folgt:
cntReturned: 0
cntReturned: 0
cntReturned: 1
cntReturned: 2
cntReturned: 3
cntReturned: 4
Das bedeutet, die Rekursion legt das Ergebnis jeweils auf
Stack und gibt sie nach und nach wieder, sodass mein Rückgabewert
4 lautet. ich möchte jedoch eine 0 bekommen, die Rekursion verlassen
wird. wie soll ich das anstellen?
Danke
Hallo Fabian,
das Problem in deinem Programm ist, dass Du den aktuellen Wert, mit dem Du reingehst zurückgibts. D.h. egal welche Zahl Du verwendest, Du wirst unabhängig von der Rekursionstiefe diese genau diese Zahl zurückbekommen. Das könnte man jetzt auch beweisen, aber das lassen wir mal jetzt.
Der Fehler liegt darin, dass Du nie den Rückgabewert der Funktion auswertest, sondern immer den Parameter cnt in diesem Aufruf zurückgibst.
Schreibe das Programm wie folgt um:
public static int rekursion (int cnt){
final int result;
if (cnt\>0) { result=rekursion(--cnt); } else { result=cnt; }
System.out.println("cnt: " + cnt);
System.out.println("cntReturned: " + result);
return result;
}
Damit sollte es funktionieren.
Gruß,
Frank
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]