题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0;
方法一:暴力
思路:底数的指数次方相当于指数个底数(或底数倒数)相乘
时间复杂度O(n),空间复杂度O(1)
①:特殊情况一:底数为0,指数不为0时,返回0;特殊情况二:底数不为0,指数为0时,返回1;
②:当指数为正数时,返回的是指数个底数相乘的结果
③:当指数为负数时,返回的是指数个底数的倒数相乘的结果

public double Power(double base, int exponent) {
        if(base==0&&exponent!=0){
            return 0.00;
        }
        if(exponent==0&&base!=0){
            return 1.00;
        }
        double getPower=1.0;
        if(exponent>0){
            for(int i=0;i<exponent;i++){
                getPower*=base;
            }
        }else{
            for(int i=0;i<Math.abs(exponent);i++){
                getPower*=(1/base);
            }
        }
        //if(getPower<=Double.MAX_VALUE&&getPower>=Double.MIN_VALUE){
            //return getPower;
        //}
        return getPower;
}

暴力运行结果:69ms;10548K
方法二:递归法
自己用暴力法做出来后,偷偷看了题解,发现大家提出的快速幂的公式,然后搭配递归,感觉比较不错,于是自己也尝试了下递归的方法,感谢大神们的思路,哈哈。
思路分析(快速幂):递归其实就是首先找到base case;然后需要找的就是递归的当前项和前一项的关系,在本题中,有两种情况:1.指数为偶数;2.指数为奇数
情况1:指数为偶数,则![图片说明](https://www.nowcoder.com/equation?tex=x%5E%7Bn%7D%3Dx%5E%7Bn%2F2%7D*x%5E%7Bn%2F2%7D "图片标题") ;如![图片说明](https://www.nowcoder.com/equation?tex=x%5E%7B8%7D%3Dx%5E%7B4%7D*x%5E%7B4%7D "图片标题") ;
情况2:指数为偶数,则![图片说明](https://www.nowcoder.com/equation?tex=x%5E%7Bn%7D%3Dx%5E%7Bn%2F2%7D*x%5E%7Bn%2F2%7D*x "图片标题") ,如![图片说明](https://www.nowcoder.com/equation?tex=x%5E%7B9%7D%3Dx%5E%7B4%7D*x%5E%7B4%7D*x "图片标题") 。
注:需要注意的是,如果指数小于0的话,则每一项为正指数结果的倒数,代码如下:

public double Power(double base, int exponent) {
    //base case:
         if(base==0&&exponent!=0){
            return 0.00;
         }
         if(exponent==0&&base!=0){
            return 1.00;
         }
         if(exponent>0){
             return  exponent%2==0? Power(base,exponent/2)*Power(base,exponent/2):Power(base,exponent/2)*Power(base,exponent/2)*base;
         }else{
             return  exponent%2==0? 1/(Power(base,-exponent/2)*Power(base,-exponent/2)):1/(Power(base,-exponent/2)*Power(base,-exponent/2)*base);
         }
}

递归运行结果:47ms;10308k
方法三:调用库函数
在题解里还看到了直接调用库函数的方法,感觉还是比较妙的,顺便测试了一下,哈哈,自己怎么就没想到呢!!!

public double Power(double base, int exponent) {
    return Math.pow(base,exponent);
}

运行结果:47ms;10412k
综上三种结果,递归方法感觉更好一些,大家可以测试下。