Java Rekursion mit Potenzzahlen?
public static void main(String[] args) {
System.out.println(potenzRechner(4,3));
}
public static int potenzRechner(int potenzzahl1, int potenzzahl2) {
if (potenzzahl2 == 0) {
return 1;
} else if (potenzzahl2 == 1) {
return potenzzahl1;
} else {
return potenzzahl1 * potenzRechner(potenzzahl1, potenzzahl2 - 1);
}
}
Ich habe den Code oben mit einer Rekursiven Methode, der die Potenz der mitgegebenen Zahlen (in dem Fall 4 und 3) errechnet. Jedoch kann ich nicht 100% nachvollziehen was im letzten else Zweig passiert.
(return potenzzahl1 * potenzRechner(potenzzahl1, potenzzahl2 - 1);)
Wird Potenzzahl1 (4) nicht mit sich selbst (4) mal genommen, und das Potenzzahl2 (2) mal? Also 4 * 4 * 4 = 64? Und das solange bis Potenzzahl2 bei 1 ankommt. Also (4^3) 4 * 4 * 4 = 64, (4^2) 4 * 4 = 16, (4^1) 4 = 4. Oder verstehe ich was falsch? Dann sollte doch theoretisch das Ergebnis (64) beim ersten durchlauf schon rauskommen, für was dann eine Aufgabe bei der man das Rekursiv machen soll?
Zusammengefasst: Kann mir jemand auf gut Deutsch diesen Ausdruck, in der die Rekursion sattfindet, erklären?
4 Antworten
In der Zeile steht quasi Um die Potenz mit dem um 1 verringerten Exponenten zu berechnen, wird diese Zeile rekursive aufgerufen bis der Exponent 0 ist. Dann landet man bei der Anweisung nach dem ersten if und es wird x⁰ = 1 ausgegeben.
Bei jedem Aufruf der Funktion wird 4ⁿ durch 4⋅4ⁿ⁻¹ bzw im Fall n = 0 durch 1 ersetzt.
Ja das könnte in einer zeile errechnet werden aber sieht aus als wär der Sinn dahinter Rekursion anzuwenden.
und Rekursion findet immer da statt wo die Funktion sich selbst wieder aufruft. Wie der genau rechnet hat Sogradest erklärt
- potenzRechner(4,3) => 4 * potenzRechner(4, 2)
- potenzRechner(4,2) => 4 * potenzRechner(4, 1)
- potenzRechner(4,1) => 4
Da potenzzahl2 als 1 übergeben wurde, hat die Rekursion geendet und das Ergebnis wird zurückgegeben.
Also, das Ergebnis ist 444 = 64
es werden quasi Klammern aufgebaut:
4*(4*(4*1)))
und dann von innen nach außen gerechnet.