我需要编写一个名为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而不是。我该如何实现这种方法?
答案 0 :(得分:3)
您必须分支,具体取决于您是否具有负值或正值。
这是一个适用于递归的版本:
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
太大或太小,那么您将遇到堆栈溢出,因此将其更改为非递归函数将留给操作。
修改:关于您的上一个问题,您将结果设置为1.0
,因为!(1 <= -2)
从未使用循环体,因此您返回未修改的结果1.0
答案 1 :(得分:1)
好吧,最后如果您想以迭代的方式进行,请先检查y
是正还是负。
public double pow2(double x, int y)
{
double total = 1.0;
if(y > 0)
{
for(int i = 1 ; i <= y ; i++)
{
total *= x;
}
}
else
{
for(int i = -1 ; i >= y ; i--)
{
total /= x;
}
}
return total;
}
答案 2 :(得分:-1)
public static void main(String[] args) {
System.out.println(pow2(2,3));
}
public static double pow2(double x,int y){
double total=1;
for(int i=1;i<=y;i++){
total*=x;
}
return total ;
}
答案 3 :(得分:-1)
public static double pow2(double x,int y){
double total=1;
if(y>0){
for(int i=1;i<=y;i++){
total*=x;
}
return total;
}
else if (y<0){
double temp=1/x;//this makes 2 as 1/2
y=y*-1; //to have a meaningful iteration if for loop
for(int i=1;i<=y;i++){
total*=temp;
}
return total;
}else
return 1;
}