讨论/《递归》 - Pow(x, n)/

之前用递归的方法求解提交时一直出现栈溢出,栈溢出的位置在return myPow(1/x, -n);这个位置,我一直以为是n太大导致的,不得已我改用了迭代的写法。
后面才发现其实测试中存在n == -n的情况,当n为int型并取值为-2147483648(即-2^31)时,有int == -int;这个时候-n 和 -1*n的结果都为n。所以要将n从int型改为double型。(还好今天又看了一下代码,不然这个问题会被我忽视掉)

    public double myPow(double x, int n) {
        if(x == 1 || x == 0)    return x;
        if(n>=0){
            if(n == 1)  return x;
            if(n == 0)  return 1;
            if(n%2 == 1)    return x*myPow(x*x,(n-1)/2);
            else    return myPow(x*x, n/2);
        }
        else{
            return myPow(1/x,-n);
        }
    }

修改后

public double myPow(double x, double N) {
        double n = N;
        if(x == 1 || x == 0)    return x;
        if(n>=0){
            if(n == 1)  return x;
            if(n == 0)  return 1;
            if(n%2 == 1)    return x*myPow(x*x,(n-1)/2);
            else    return myPow(x*x, n/2);
        }
        else{
            return myPow(1/x,-n);
        }
    }
展开全部 2 讨论