我需要编写一个名为 pow2
的方法接受实数基数和整数指数作为参数。它应该将基数返回到给定的幂。您的代码应该适用于正指数和负指数。例如,调用 pow2(2.0, -2)
返回0.25
。不要在您的解决方案中使用 Math.pow。
这是我到目前为止所拥有的:
public double pow2(double x,int y){
double total=1;
for(int i=1;i<=y;i++){
total*=x;
}
return total;
}
但问题是当我尝试调用 pow(2.0, -2)
时,它返回我 1.0。如何实现这个方法?
最佳答案
您必须进行分支,具体取决于您的值是负值还是正值。
这是一个适用于递归的版本:
public double pow2(double x,int y){
return _pow2(1.0, x, y);
}
private double _pow2(double res, double x, int y) {
if (y < 0) return _pow2(res/x, x, y+1);
if (y > 0) return _pow2(res*x, x, y-1);
return res;
}
如果y
太大或太小,那么你会遇到堆栈溢出,所以将其更改为非递归函数留给运算符(operator)。
编辑:关于您的最后一个问题,您将结果设置为 1.0
,循环体永远不会被使用,因为 !(1 <= -2)
,因此您返回 1.0
的未修改结果
关于java - 不允许使用Math.pow时计算指数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310375/