Einfache Rekursion - Wert wird nicht in Variable gespeichert

Katzenstreik

Mitglied
Hallo zusammen,

ich habe eine (einfache) Frage zur Rekursion. Und zwar habe ich diese rekursive Methode geschrieben, die an sich auch das tut was sie soll. Nur leider wird der Wert den ich mit l++ erhöhe, beim nächsten Methoden-Aufruf durch sich selbst nicht gespeichert. Dieselbe Methode habe ich iterativ geschrieben, dort funzt es.

Kann mir jmd erklären, weshalb die Erhöhung von l um 1 pro Aufruf nicht gespeichert wird?

Danke euch!

Java:
	public static int potenzr(int n, int l){
	 
      if (n  ==  1){
          return 1;
      }
      else{
    	 
         potenzr(n/2, l++);
          
      }  
      System.out.println (l);     
      return l;
   }


    public static void main(String [] args)
    {

       int l=0;
       int n;
    
       String aus = JOptionPane.showInputDialog( "n = " ); 
       n = Integer.parseInt(aus);
       System.out.println(potenzr(n, l));
       
    }
 
danke ARadauer,

es funktioniert, außerdem ist mir dabei aufgefallen das ich folgendes nicht schreiben kann:

Java:
    return potenzr(n/2, l++);

richtig ist es so:

Java:
    return potenzr(n/2, l+1);

Jetzt stellt sich mir noch eine weitere Frage:

Wie kann ich den Wert von l jetzt in der main-Methode per System.out.print ausgeben lassen? Bei mir nimmt er ständig wieder den Wert 0 an.

Danke nochmals!
 
Zuletzt bearbeitet:
Katzenstreik hat gesagt.:
Danke für die Übersicht. Leider steht dort nicht, dass ich die Operation l++ nicht ausführen kann, wenn ich eine Methode sich selbst aufrufen lasse. (Vorausgesetzt es liegt auch daran)

Doch, sieh dir doch das Beispiel an. Du musst
Code:
++l;
verwenden und nicht
Code:
l++;

Java:
Beispiel   Präfix/Postfix in einer Ausgabeanweisung:
int i = 10, j = 20;
System.out.println( ++i );       // 11
System.out.println( --j );       // 19
System.out.println( i );         // 11
System.out.println( j );         // 19
Die Variable wird erst erhöht und dann ausgegeben. Wiederholen wir mit i und j die Ausgaben mit Postfix:
int i = 10, j = 20;
System.out.println( i++ );       // 10
System.out.println( j-- );       // 20
System.out.println( i );         // 11
System.out.println( j );         // 19

Der Wert wird im Ausdruck verwendet und erst anschließend erhöht. Wir bekommen mit dem Präfix den Ausdruck nach der Operation und mit dem Postfix den Ausdruck davor.
 

Zurück
Oben