Rekursion programmieren

Maultäschle

Aktives Mitglied
Hello,

ich würde gerne diese Funktion rekursiv programmieren:
f(x)={ x-15, x>150
f(f(x-16)) sonst}

Ich hätte daraus eine Funktion mit if und Else gemacht, aber ich soll die rekursiv programmieren und da hab ich keine Ahnung, wie ich vorgehen soll...
 
Zuletzt bearbeitet:

JCODA

Top Contributor
versuch es mal mit if else, und poste deinen Code.
Du musst sehr wahrscheinlich if/else in der rekursiven Version benutzen ...
 

Meniskusschaden

Top Contributor
Vielleicht habe ich da noch einen Denkfehler, aber mir leuchtet der Sinn der Aufgabe nicht ein. Entweder x ist größer als 150. Dann wird 15 subtrahiert und man ist fertig.
Oder x ist kleiner/gleich 150. Dann wird das Funktionsargument immer kleiner und es gibt es eine theoretisch endlose Rekursion, die nur dadurch beendet wird, dass es entweder zum Stapelüberlauf kommt, oder dadurch, dass das Funktionsargument wegen Überschreitung des Wertebereichs doch wieder positiv wird.
 

Meniskusschaden

Top Contributor
Hm, bezieht sich das jetzt auf die Aufgabenstellung oder den Lösungsansatz? Für mich ergibt beides keinen Sinn. Ist die Aufgabenstellung nun korrekt oder nicht?
 

Meniskusschaden

Top Contributor
Wenn man deine Korrekturen aus Post #7 einbaut, sieht deine Lösung also wie folgt aus:
Java:
    private static int berechne(int x) {
        int ergebnis;
        if (x > 150) {
            ergebnis = x-15;
        } else {
            ergebnis = x+16;
        }
        return ergebnis;
    }
Der if-Zweig der Bedingung entspricht der Aufgabenstellung. Aber wie kommst du im else-Zweig auf x+16? In der Aufgabenstellung steht doch etwas anderes, nämlich x-16. Ausserdem soll nicht x-16 zurück geliefert werden, sondern der Rückgabewert des Methodensaufrufes des Rückgabewertes des Methodenaufrufes berechne(x-16). Dann müsste aber meine Argumentation aus Post #3 zum Tragen kommen. Ich glaube deshalb immer noch, dass die Aufgabenstellung fehlerhaft ist.
 

Meniskusschaden

Top Contributor
Noch eine Ergänzung, weil meine Formulierung im vorigen Post vielleicht etwas mißlungen ist: Im else-Zweig soll nicht x-16 berechnet werden und auch nicht f(x-16), sondern f(f(x-16)).
 

Neue Themen


Oben