问题描述
思路
用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,再往回乘,
如果此时n是偶数,直接把上次递归得到的值算个平方返回
如果是奇数,n是正数,则平方还需要乘上x的值。n是负数,则平方还需要乘上1/x的值。
java实现
class Solution {
public double myPow(double x, int n) {
if(n == 0)
return 1.;
double half = myPow(x, n / 2);
return n % 2 == 0 ? half * half : n < 0 ? half * half * (1 / x) : half * half * x;
}
}