剑指 Offer 16. 数值的整数次方
难度:中等
题目描述
解题思路
1、非递归写法 快速幂
/*
* 剑指 Offer 16. 数值的整数次方
* 2020/8/4 非递归写法
*/
public double myPow(double x, int n) {
long time = n;
if(time < 0) {
x = 1/x;
time *= -1;
}
double res = 1;
while (time > 0) {
if ((time % 2) == 1) {
res *= x;
}
x *= x;
time /= 2;
}
return res;
}
2、递归写法
//递归写法
public double myPow1(double x, int n) {
//递归出口
if(n == 0) return 1;
if(n == 1) return x;
if(n == -1) return 1/x;
double half = myPow(x, n / 2);
double mod = myPow(x, n % 2);
return half * half * mod;
}