常规解法

public class Solution {
    public double Power(double base, int exponent) throws Exception {
        if(exponent == 0){
            if(base == 0){
                throw new Exception();
            }else{
                return 1;
            }
        }
        
        if(exponent == 1){
            return base;
        }
        
        double result = base;
        
        double flag = exponent > 0 ? 1 : -1;
        exponent -= flag;
        while(exponent != 0){
            result = result * base;
            exponent -= flag;
        }
        return flag == 1 ? result : (1 / result);
  }
}

转换为斐波那契数列,使用递归解决

public class Solution {
    public double Power(double base, int exponent) throws Exception {
        if(exponent == 0){
            if(base == 0){
                throw new Exception();
            }else{
                return 1;
            }
        }
        
        if(exponent == 1){
            return base;
        }
        
        double flag = exponent > 0 ? 1 : -1;
        exponent = exponent > 0 ? exponent : exponent * -1;
        double result = powerUnsigned(base, exponent);
        return flag == 1 ? result : (1 / result);
    }
    
    public double powerUnsigned(double base,int exponent) throws Exception {
        if(exponent == 0){
            if(base == 0){
                throw new Exception();
            }else{
                return 1;
            }
        }

        if(exponent == 1){
            return base;
        }

        double result = powerUnsigned(base, exponent >> 1);
        result *= result;
        if((exponent & 1) == 1){
            result *= base;
        }
        return result;
    }
}