Rekursive Methode - wo ist der Fehler?

Status
Nicht offen für weitere Antworten.

muemmel_0811

Bekanntes Mitglied
Hi zusammen,

ich hab versucht die Excel-Funktion "Obergrenze" nachzubauen. Für alle, die sie nicht kennen: Excel rundet eine Zahl mit dieser Funktion auf das nächste Vielfache, des gegebenen Schrittes, auf, also aus 542,6 und Schritt=10 wird demnach 550. So, wie gesagt, ich hab versucht die Funktion nachzubauen und krieg's irgendwie nicht hin 🙁
Mein Ansatz war bisher folgender:
Code:
public class TestApp {
    private double limit(double t, int l) {
        double rest1, rest2;
        rest1 = t % l;
        if(rest1 != 0) {
            t = Math.ceil(t);
            rest2 = t % l;
            if(rest2 != 0) {
                t = t + 1;
                limit(t, l);
            }
        }
        return t;
    }
    public static void main(String[] args) {
        TestApp tap = new TestApp();
        double res;
        
        double t = 542.6;
        res = tap.limit(t, 10);
        
        System.out.println(res);
    }
}
Gewünschtes Ergebnis sollte ja 550 sein, raus kommt 544. Mittels dem Eclipse-Debugger kann ich ja nun zuschauen, was da im Einzelnen passiert, aber ich versteh's ehrlich gesagt nicht. Es läuft ja zunächst alles so, wie ich mir das vorgestellt hatte. t wird bis auf 550 aufsummiert, aber dann, warum läuft das ganze dann wieder rückwärts bis zu 544 runter?
Mag mir das mal jemand erklären?

Danke und Grüße vom muemmel_0811
 
Ne. Aber das, was du beschrieben hast, dürfte imho auch so gehen:
[highlight=Java]
public static double f(double x, double step){
return step*(Math.ceil(x/step));
}
public static void main(String... _){
System.out.println(f(542.6,10)); //liefert 550
}
[/highlight]
keine Ahnung wo du da rekursion unterbringen willst..???:L
 
Danke Dir - jetzt ist zwar mein Grundproblem gelöst, aber warum meine rekursive Lösung "rückwärts" läuft, würde mich dennoch interessieren.
Ach ja - bevor sich noch jemand wundert... das mit dem Wald und den Bäumen kann ich extrem gut 😳
 
Zuletzt bearbeitet:
Danke Dir - jetzt ist zwar mein Grundproblem gelöst, aber warum meine rekursive Lösung "rückwärts" läuft, würde mich dennoch interessieren.
Ach ja - bevor sich noch jemand wundert... das mit dem Wald und den Bäumen kann ich extrem gut 😳

Weil du den Rückgabewert von limit() ignorierst

Ungetestet:
Code:
        private double limit(double t, int l) {
            double rest1, rest2;
            rest1 = t % l;
            if(rest1 != 0) {
                t = Math.ceil(t);
                System.out.println(t);
                rest2 = t % l;
                if(rest2 != 0) {
                    t = t + 1;
                    t = limit(t, l);
                }
            }
            return t;
        }
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben