Moinsen, ich hab da mal eine Frage.
Ich versuche gerade etwas von Rekursion in Endrekursion zu überführen.
Endrekursion: ich muss nach dem "drübergehen" nicht mehr "zurück", wenn ich das richtig verstanden habe. SPrich: die letzte Rekursion gibt nur noch den fertigen Wert, ohne Berechnung, zurück.
Grob habe ich dahingehend verstanden, was man machen müsste: das Zwischenergebnis der Berechnung (pow(x%10,y) muss ich wohl irgendwie als Argument an die endrekursiv-Methode übergeben.
Die Abbruchbedingung ist hier meiner Meinung nach klar die x<10-Bedingung.
Hat hier irgendjemand irgendwie einen Denkansatz?
Edit:
Nach ein bisschen grübeln und probieren:
Passt das so? Die Ergebnisse sind zumindest richtig, aber ist das endrekursiv?
Ich denke ja, weil: der letzte Call ist keine "Rechenoperation", sondern schlichtweg wiederum entweder ein Funktionsaufruf oder eben das Ergebnis mit dem "pow".
Ich versuche gerade etwas von Rekursion in Endrekursion zu überführen.
Endrekursion: ich muss nach dem "drübergehen" nicht mehr "zurück", wenn ich das richtig verstanden habe. SPrich: die letzte Rekursion gibt nur noch den fertigen Wert, ohne Berechnung, zurück.
Code:
public static int endrekursiv(int x, int y) {
if (x < 10) {
return Math.pow(x, y);
}
return Math.pow(x % 10, y) + endrekursiv(x / 10, ++y);
}
Grob habe ich dahingehend verstanden, was man machen müsste: das Zwischenergebnis der Berechnung (pow(x%10,y) muss ich wohl irgendwie als Argument an die endrekursiv-Methode übergeben.
Die Abbruchbedingung ist hier meiner Meinung nach klar die x<10-Bedingung.
Hat hier irgendjemand irgendwie einen Denkansatz?
Edit:
Nach ein bisschen grübeln und probieren:
Passt das so? Die Ergebnisse sind zumindest richtig, aber ist das endrekursiv?
Ich denke ja, weil: der letzte Call ist keine "Rechenoperation", sondern schlichtweg wiederum entweder ein Funktionsaufruf oder eben das Ergebnis mit dem "pow".
Code:
public static int endrekursiv(int x, int y, int erg) {
if (x < 10) {
return erg + Math.pow(x % 10, y);
}
erg += Math.pow(x % 10, y);
return endrekursiv(x / 10, ++y, erg);
}
Zuletzt bearbeitet: