私は現在、再帰を使用して累乗計算を行う方法に取り組んでいます。これまで私が持っているものは次のとおりです。再帰的な累乗法を固定しますか?
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);
}
}
}
私には2つの問題があります。最初の問題は、負の指数を行うことができないということです。負の指数を必要としないので、これは大きな問題ではありません。第二の問題は、私に間違った答えを与える特定の計算です。例えば2^63は私に正しい値を与えますが、それは私に負の数を与えます。そして2^64そしてちょうど私に0を与えてください。私はこれを修正するためにとにかくありますか?私はlong
をdouble
に切り替えることができ、私の方法は完全に機能することを知っています。しかし、私の教授はlong
を使用する必要があります。ご協力ありがとうございました!
[Long.MAX_VALUE](http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#MAX_VALUE)。 – rgettman
@rgettman私はこれを理解しています。私が持っているものでこれを回避する方法があるかどうかを知りたい。私はこれが愚かな質問のように聞こえるかもしれないことを知っていますが、私はプログラミングに新しいので、私はただ尋ねて見なければならないと思っていました。 – name
@ug_ああ、大丈夫です。しかし、私はlongのものを倍に変更すると、より大きな値のためにはなぜ機能するのですか? – name