Ich arbeite gerade an einer Methode, um eine Exponentiationsrechnung mit Rekursion durchzuführen. Hier ist, was ich bis jetzt habe:Fixing rekursive Exponentiation Methode?
public static long exponentiation(long x, int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return x;
// i know this doesn't work since im returning long
} else if (n < 0) {
return (1/exponentiation(x, -n));
} else {
//do if exponent is even
if (n % 2 == 0) {
return (exponentiation(x * x, n/2));
} else {
// do if exponent is odd
return x * exponentiation(x, n - 1);
}
}
}
Ich habe zwei Probleme. Das erste Problem ist, dass ich keine negativen Exponenten machen kann, dies ist kein großes Problem, da ich keine negativen Exponenten machen muss. Zweite Frage, bestimmte Berechnungen geben mir die falsche Antwort. Zum Beispiel gibt 2^63 mir den richtigen Wert, aber es gibt mir eine negative Zahl. Und 2^64 und gib mir einfach 0. Gibt es trotzdem etwas für mich, das zu beheben? Ich weiß, dass ich einfach die long
's zu double
wechseln könnte und meine Methode wird perfekt funktionieren. Mein Professor hat uns jedoch gebeten, long
zu verwenden. Danke für Ihre Hilfe!
[Long.MAX_VALUE] (http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#MAX_VALUE). – rgettman
@gerttman Ich verstehe das. Ich möchte wissen, ob es einen Weg gibt, mit dem, was ich habe, umzugehen. Ich weiß, das klingt vielleicht nach einer dummen Frage, aber da ich neu im Programm bin, dachte ich, ich sollte einfach fragen und sehen. – name
@ug_ Oh, in Ordnung. Aber warum funktioniert es für größere Werte, wenn ich die Longs zu Double ändere? – name