for Schleife durch Rekursion ersetzen

Diskutiere for Schleife durch Rekursion ersetzen im Java Basics - Anfänger-Themen Bereich.
N

nikva

Ich will folgende Methode durch eine rekursive Methode ersetzen:
Die Ausgabe soll wie folgt aussehen:

Hours passed: duration-duration
Hours passed: duration-(duration-1)
Hours passed: duration-(duration-2)
u.s.w

Java:
    public static void runSuperSale(int duration) {
        for (int i = duration; i > 0; i--) {
            System.out.println("Hours passed: " + (duration - i));
        }
    }

Wenn ich es so mache dann kommt logischerweise immer 0 raus
Java:
    public static void runSuperSale(int duration) {
        int x = duration;
        System.out.println("Hours passed: " + (duration - x));
        if (duration - x < duration) {
            runSuperSale(duration - 1);
        }
    }
Wenn ich x einen fest wert zuweise dann funktioniert die Methode nur mit einem bestimmten parameter
Es muss iwie eine Möglichkeit geben beim ersten Aufruf einen konstanten wert zu erzeugen der dann beim nächsten Aufruf verwendet wird.
Oder geht das nur mit einer Hilfsmethode?
 
T

TM69

1. Warum willst du eine Wert haben
2. Warum benutzt du keine Parameter
3. Wieso willst du eine statische Funktion rekusiv machen? - Ich meine ggf. kannst du bei einer nicht statischen Funktion auch eine Klassenvariable machen, und wenn du es statischen machen willst, warum benutzt du es nicht so wie man es bei Instanzenzählern macht? :D
 
A

affot

Also abgesehen davon, dass man das es iterativ besser ist... Hier mit Rekursion :)
Java:
    static void methode(int duration) {
        if (duration > 0) {
            methode(duration - 1);
            System.out.println("Hours passed: " + (duration - 1));
        }

    }
Ich denke der Knackpunkt ist der, dass du ERST die Funktion rekursiv aufrufst und dann den Print-Aufruf. Dadurch wird die Zeile von unten nach oben ausgespuckt.
 
N

nikva

Ich denke der Knackpunkt ist der, dass du ERST die Funktion rekursiv aufrufst und dann den Print-Aufruf. Dadurch wird die Zeile von unten nach oben ausgespuckt.
Danke, das ergibt natürlich Sinn :D
Ich hab es andersrum versucht und dann lief die natürlich in einem unendlichen Kreis...
 
N

nikva

Ich soll auch Junit Tests schreiben und bin jetzt bei dieser Methode angelangt und Frage mich ob diese überhaupt testbar ist. Sie hat keinen Einfluss auf andere Objekte und hat auch keinen Rückgabewert den man vergleichen könnte.
Man könnte höchstens das Print Statement in einem String zwischenSpeichern und den dann vergleichen, aber ist es sinnvoll das extra für den Junit Test zu machen, oder sollte man die Methode einfach ungetestet lassen?
 
mrBrown

mrBrown

Man könnte höchstens das Print Statement in einem String zwischenSpeichern und den dann vergleichen, aber ist es sinnvoll das extra für den Junit Test zu machen, oder sollte man die Methode einfach ungetestet lassen?
Man könnte sie auch anderswo hin als nach System.out schreiben lassen oder für den Test System.out "überschrieben" und damit alles mitschneiden was dort landet :)

Ungetestet lassen ist meistens die schlechteste Wahl :)
 
Thema: 

for Schleife durch Rekursion ersetzen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben