快速幂
例如:5的5次方可以写成如下
(5个5相乘)5 * 5 * 5 * 5 * 5 = 25 * 25 * 5 = 5^2 * 5^2 * 5
(4个5相乘)5 * 5 * 5 * 5 = 25 * 25 = 5^2 * 5^2
(n个5相乘)5 ^ (n/2) * 5 ^ (n/2) * 5 (n为奇数)
5 ^ (n/2) * 5 ^ (n/2) (n为偶数)
public static double myPow(double x, int n) {
if (n == 0) {
return 1;
}
double A = myPow(x, n / 2);
if (n % 2 == 0) {
return A * A;
} else {
return A * A * x;
}
}
核心思想:将问题的规模缩小到一半,剩下的操作都是常数目
所以时间复杂度为O(logn)