很经典的快速幂算法,当时学的时候真是一头雾水啊难啊,不过现在看来都是菜菜,哈哈哈~
// 看offer书,突然想到一个学习快速幂算法的思路:先看书上的公式,试着递归求解,递归求解思路还是很清晰的,最最后试着看递推思路。(一上来学递推思路有点吃力)
// 递推写法
public class Solution {
public static double Power(double base, int exp) {
boolean flag = false;
if (exp < 0) {
flag = true;
exp = -exp;
}
double ans = 1;
while (exp > 0) {
if ((exp & 1) == 1) {
ans = ans * base;
}
exp >>= 1;
base *= base;
}
return flag ? 1 / ans : ans;
}
}我竟然没写过递归的快速幂算法,成功get到新技能~
// 递归写法
public class Solution {
public static double Power(double base, int exp) {
boolean flag = exp < 0;
if (flag) {
exp = -exp;
}
double result = getPower(base, exp);
return flag ? 1 / result : result;
}
public static double getPower(double base, int exp) {
if (exp == 0) {
return 1;
}
if (exp == 1) {
return base;
}
double ans = getPower(base, exp >> 1);
ans *= ans;
if ((exp & 1) == 1) {
ans *= base;
}
return ans;
}
}
京公网安备 11010502036488号