题目要求

此处为题目链接
即用自己的代码实现指数运算。
指数运算一般有两种情况,即指数为整数和指数为负数的情况。指数为负数即求其倒数。

思路一:二分法计算

这题的思路我之前的一篇博客思路基本相同。有兴趣的可以直接翻看那篇博客再思考一下这题。代码如下

public double myPow(double x, int n) {
        if(x==0) return 0;
        if(n==0) return 1;
            
        x = n>0 ? x : 1/x;
        n = Math.abs(n);
        if(n%2!=0){
            return x*myPow(x, n-1);
        }
        long temp = 1;
        double result = x;
        while(n >= (temp+temp)){
            temp += temp;
            result *= result;
        }
        return result*myPow(x, n-(int)temp);
    }

思路二:递归

递归的方法在大多数情况下比较消耗存储空间,因为会保留上一个结果的所有情况和指向子函数的指针。所以在能转换为循环的情况下还是最好使用循环来解决。

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

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~


raledong
2.7k 声望2k 粉丝

心怀远方,负重前行