我目前正在研究使用递归进行指数计算的方法。这是我到目前为止:修复递归求幂法?
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^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_哦,好的。但为什么当我把长变成双倍时,它会对更大的价值起作用? – name