递归计算指数。获得溢出异常

时间:2015-04-13 17:51:44

标签: java recursion

我必须递归计算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);
        }
        }

2 个答案:

答案 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;