题目要求
此处为题目链接
即用自己的代码实现指数运算。
指数运算一般有两种情况,即指数为整数和指数为负数的情况。指数为负数即求其倒数。
思路一:二分法计算##
这题的思路我之前的一篇博客思路基本相同。有兴趣的可以直接翻看那篇博客再思考一下这题。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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); }
|
思路二:递归
递归的方法在大多数情况下比较消耗存储空间,因为会保留上一个结果的所有情况和指向子函数的指针。所以在能转换为循环的情况下还是最好使用循环来解决。
1 2 3 4 5 6 7
| 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); }
|