Hallo,
ich lerne gerade Java und bin nun beim Thema Rekursion angelangt. Bei einfachen Sachen wie Fakultät oder Collatz kann ich den Ablauf ja einigermaßen nachvollziehen, aber da gibt es eine Beispielmethode mit 2 rekursiven Aufrufen, bei der ich die Funktion gar nicht verstehe. Es geht darum, 2^n Kreuze zu schreiben:
public static void muster (int n){
if (n>0) {
muster (n-1);
IO.print ('#');
muster (n-1);
}
}
Nehmen wir an, muster wird mit n=3 aufgerufen. Nach meinem bisherigen Verständnis müsste es so ablaufen: Die if-Bedingung ist erfüllt und die Anweisungen danach werden abgearbeitet. Dann wird muster(2) aufgerufen. Dies wiederholt sich noch 2x, dann ist n=0 und die if-Bedingung ist nicht erfüllt. Dann müsste es hinter dem if-Block weitergehen, aber da kommt ja nichts mehr, also wäre die Methode zuende.
Ich kann nun nicht nachvollziehen, warum überhaupt etwas gedruckt wird, da die print-Anweisung und der 2. Rekursionsaufruf nie erreicht werden kann. Irgenwas verstehe ich da wohl falsch, aber was?
Danke vorab für jede Hilfe
ich lerne gerade Java und bin nun beim Thema Rekursion angelangt. Bei einfachen Sachen wie Fakultät oder Collatz kann ich den Ablauf ja einigermaßen nachvollziehen, aber da gibt es eine Beispielmethode mit 2 rekursiven Aufrufen, bei der ich die Funktion gar nicht verstehe. Es geht darum, 2^n Kreuze zu schreiben:
public static void muster (int n){
if (n>0) {
muster (n-1);
IO.print ('#');
muster (n-1);
}
}
Nehmen wir an, muster wird mit n=3 aufgerufen. Nach meinem bisherigen Verständnis müsste es so ablaufen: Die if-Bedingung ist erfüllt und die Anweisungen danach werden abgearbeitet. Dann wird muster(2) aufgerufen. Dies wiederholt sich noch 2x, dann ist n=0 und die if-Bedingung ist nicht erfüllt. Dann müsste es hinter dem if-Block weitergehen, aber da kommt ja nichts mehr, also wäre die Methode zuende.
Ich kann nun nicht nachvollziehen, warum überhaupt etwas gedruckt wird, da die print-Anweisung und der 2. Rekursionsaufruf nie erreicht werden kann. Irgenwas verstehe ich da wohl falsch, aber was?
Danke vorab für jede Hilfe