我必须递归计算x ^ n,我没有问题。当n甚至使用时,我还必须实现更有效的方法,x ^ n =(x ^ n / 2)^ 2。也许我没有正确实现它,但是当它似乎给我一个溢出错误。
public static double exponent(double x, int n){
if(n < 1){
return 1;
}else{
if(n % 2 ==0){
return x *power(x, (n/2)*(n/2));
}else{
return x * power(x, n-1);
}
}
答案 0 :(得分:4)
你的偶数幂n
的情况不正确。您的return语句相当于x * x n 2 / 4 。
相反,将n/2
作为指数传递给递归调用,并在返回之前将其平方。使用x n =(x n / 2 ) 2 的事实。
double y = power(x, n/2);
return y * y;
答案 1 :(得分:0)
return x *power(x, (n/2)*(n/2));
应该是
double tmp = power(x, n/2)
return tmp * tmp;