Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class Squared {
static void down1( int n )
{
if ( n <= 0 ) // Rekursionsende
return;
System.out.print( n + ", " );
down1( n - 1 );
}
static void down2( int n )
{
if ( n <= 0 ) // Rekursionsende
return;
down2( n - 1 );
System.out.print( n + ", " );
}
public static void main(String[] args)
{
down2(10);
}
}
Verstehe net warum das Ergebnis von down2(10); 1,2,3,4,5,6,7,8,9,10 ist. Bitte detailiert erklären.
die funktion wird rekursiv aufgerufen... erst mit 10, dann 9, 8 etc
jeder aufruf bleibt bei
down2 stecken und kann erst das print ausfuehren wenn die rekursion zu ende ist
die letzte gueltige rekursion ist mit n = 1, da danach das Rekursionsende erfuellt ist.
dann koennen alle Rekursionen das print ausfuehren, angefangen von 1, dannn 2, 3 etc.
Na ja, was will man da grossartig erklären. Die Reihefolge der Ausgabe liegt daran, dass vor der Ausgabe von n die Methode rekursiv aufgerufen. Oder anders gesagt die Methode wird solange rekursiv aufgerufen bis n<=0 und erst dann erfolgt das System.out der jeweiligen Aufrufe in "umgekehrter" Reihenfolge
Oder stell Dir die Rekusrion nicht mit Zahlen vor, sondern mit Verzeichnissen(Ordner).
Schreibst Du eine Methode die ein Verzeichnis rekursiv löschen soll, so werden doch Dateien im tiefsten Verzeichnis zuerst gelöscht, bevor er sich immer weiter nach oben arbeitet.
Schonmal gemacht? Dann sollte es klar sein.
dann wird überprüft ob n kleiner gleich 0 ist. wenn nein wird n um eins heruntergesetzt und die schleife beginnt von neuem.
so hat man ca. 10 durchläufe in denen n immer um eins heruntergesetzt wird. dann ist n gleich 0 und dann müsste nach meinem Verständnis die Schleife einfach beendet werden, da im if ein return; steht was für mich gleichbedeutend mit break; ist.
nur der 10. Methoden-Aufruf ist damit wirklich sofort beendet,
die vorherigen werden jeweils in Anschluss an Zeile 18 fortgeführt und da kommt als nächstes Zeile 19-20
dann ist n gleich 0 und dann müsste nach meinem Verständnis die Schleife einfach beendet werden, da im if ein return; steht was für mich gleichbedeutend mit break; ist.
Das return beendet die AKTUELLE Methode. Das heisst der Aufruf von down2 wird beendet, wo n==0 ist.
Dadurch geht der Aufruf von down2 wo n==1 ist weiter: System.out.println(1); wird aufgerufen, danach ist die Methode beendet da einfach das Methodenende erreicht ist.
Dadurch geht der Aufruf von down2 wo n==2 ist weiter: System.out.println(2); wird aufgerufen, danach ist die Methode beendet da einfach das Methodenende erreicht ist.
Dadurch geht der Aufruf von down2 wo n==3 ist weiter: System.out.println(3); wird aufgerufen, danach ist die Methode beendet da einfach das Methodenende erreicht ist.
...
Dadurch geht der Aufruf von down2 wo n==10 ist weiter: System.out.println(10); wird aufgerufen, danach ist die Methode beendet da einfach das Methodenende erreicht ist.