Rekursive Folge (a=a-1)

Javascrub

Mitglied
[CODE lang="java" title="Main"] public static void main(String[] args) {

folge(5);
}[/CODE]
[CODE lang="java" title="Folge Rekursion"] public static int folge(int n) {
if(n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
System.out.println(folge(n-1));
}
return n;
}[/CODE]

Wie bekomme ich dieses N weg ? Ich möchte das er einfach schön die nacheinander auf der Console ausgibt nur hab ich grade keine Ahnung wie das anders funktioniert...
 
Welches N möchtest du genau wegnehmen? Und wie genau möchtest du die Zahlen in der Konsole ausgeben. Er gibt doch bereits die Zahlen von 1-4 untereinander aus.
 
Du musst aber ein Rückgabewert zurückgeben. Schau dir deine Methode an.

Du könntest natürlich anstatt int, void verwenden, dann könntest du dir das return n sparen, müsstest aber den Code anpassen dann.
 
Du musst aber ein Rückgabewert zurückgeben. Schau dir deine Methode an.

Du könntest natürlich anstatt int, void verwenden, dann könntest du dir das return n sparen, müsstest aber den Code anpassen dann.
Wie funktioniert das dann das ich die ganze folge ausgebe auf der console. es wäre anstatt dem sysout ja dann return folge(n-1);
und in der Main Methode ne For schleife aber das klappt einfach bei mir nicht.
 
Java:
    public static void main(String[] args) {       
        System.out.println(folge(5));
    }

    public static int folge(int n) {     
        if(n == 0) {
             return 0;
           } else {           
               return folge(n-1);   
           }
    }

Dann bekomme ich als output 0 raus weil natürlich dann der Breakpoint greift
 
[CODE lang="java" title="Code"] public static int folge(int n) {
if(n == 0) {
return 0;
} else {
return System.out.println(folge(n-1));
}
}[/CODE]
So funktioniert es auch nicht das ich in der Main methode einfach folge(5); übergebe
das sagt er "cannot return a void result"...
 
Du kannst das return nicht einfach wegmachen, weil du bei deiner Methode ein Rückgabewert brauchst. Du könntest das zum Beispiel so machen. Ich weiß jetzt nicht, ob das erste N mit ausgegeben werden soll und in welcher Reihenfolge, aber habs mal so umgeschrieben.

Java:
public static void main(String[] args) {
        folge(5);
    }

    public static void folge(int n) {

        if (n == 0) {
            return;
        }
        else {
            System.out.print(n + " ");
            folge(n-1);
        }
    }
 
Ganz einfach:
Java:
public static void folge(int n) {
    if (n > 0) {
        folge(n-1);
        System.out.println(n);
    }
}
Beispiel: es wird folge(3) aufgerufen:
Code:
folge(3)
  Zeile 2: 3 > 0, weiter im then-Block:
  Zeile 3: folge(2)
    Zeile 2: 2 > 0, weiter im then-Block:
    Zeile 3: folge(1)
      Zeile 2: 1 > 0, weiter im then-Block:
      Zeile 3: folge(0)
        Zeile 2: 0 == 0, then-Block wird nicht ausgeführt, zurück zu folge(1)
      Zeile 4: System.out.println(n) - es wird 1 ausgegeben, zurück zu folge(2)
    Zeile 4: System.out.println(n) - es wird 2 ausgegeben, zurück zu folge(3)
  Zeile 4: System.out.println(n) - es wird 3 ausgegeben, zurück zum Aufrufer

Somit wird ausgegeben:
Code:
1
2
3
 

Zurück
Oben