解题思路:这题和leetcode上的50. Pow(x, n)一样的。一般来说数值计算的题目可以用两种方法来解,一种是以2为基进行位处理的方法,另一种是用二分法。这道题这两种方法都可以解,下面介绍第二种解法。
把x的n次方划分成两个x的n/2次方相乘,然后递归求解子问题,结束条件是n为0返回1。因为是对n进行二分,算法复杂度和上面方法一样,也是O(logn)。
public class Solution {
public double Power(double base, int exponent) {
if(exponent==0)
return 1;
double half = Power(base,exponent/2);
if(exponent%2==0)
return half*half;
else if(exponent>0)
return half*half*base;
else
return half*half/base;
}
}