Verständnisfrage Zähler/Rekursion

Status
Nicht offen für weitere Antworten.

onebugarmy

Mitglied
public class Rekursion2 {
public static void doit(int i) {
if (i > 0) {
doit(i-1);
System.out.println(i);
}
}
public static void main(String[] args) {
doit(10);
}
}

Das Programm zählt hier von 1 auf 10 hoch und ich steige nicht durch wie das zustande kommt.


Mein Verständnis ist:

public static void main(String[] args) {
doit(10);
// hier wird die 10 an die doit Methode übergeben.

public static void doit(int i) {
if (i > 0) {
doit(i-1);
System.out.println(i);

ist 10 grösser als 0 ? ja!
Also dreht er seine schleife bis er auf 0 ist.
dann: ist 10 grösser als 0 ? nein!
Bildschirmausgabe von i. i ist in diesem Fall 0

Wie komt er dazu hoch zu zählen?
 
Naja, es ist ja keine Schleife im eigentlichen Sinn, sondern es sind 10 ineinander verschachtelte Methodenaufrufe (oder 11?).
Weil aber der Methodenaufruf vor dem Ausgeben des Wertes steht, gibt zuerst die zuletzt aufgerufene Methode ihren (niedrigen) Wert aus. Als letztes kommt die ursprüngliche Methode dran, wenn alle anderen Methoden fertig sind.
 
Rekursion nennt man das. Indem du die doit-methode immer wieder von sich slebst aufrufen lässt bis i (der übergebene Wert) nicht größer als 0 ist. Also egal ob du 10 oder 999999999 übergibst. kommt immer 0 raus.
 
> egal ob du 10 oder 999999999 übergibst. kommt immer 0 raus.

naja, bei 999999999 kommt sicherlich vorher der sympatische StackOverflowError
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben