Java快速幂实现
lc刷题看见的,算法并非原创,写的很简洁。
因为自己写的普通迭代碰到了阴间测试用例
这里放一种很好理解的快速幂算法:
public double myPow(double x, int n) {
double result = 1.0;
for (int i = n; i != 0; i /= 2, x *= x) {//为偶数时不计算 两倍扩大底数 指数缩小为一半
if (i % 2 != 0) {//相当于求pow(2,10)有2*2*2*2*2*2*2*2*2*2=1024 此时i=2,x=10
//也有4*4*4*4*4=1024 此时i=4,x=5
//再二分:16*16*4=1024 此时i=16 x=2
//最后分一次:256*4=1024 此时i=256 x=1
result *= x;//为奇数时则将单独的部分求积
}
}
return n < 0 ? 1.0 / result : result;//判断如果指数为负数,则返回结果的倒数
}