需要考虑的特殊情况:
- 输入的指数是0或负数
- 底数是0
一般的算法当指数为32时,需要在循环中做31次乘法,换种思路,在平方基础上求4次方,4次方基础上求8次方,利用递归可以减少乘法运算次数
package tao.leetcode;
/**
* Created by Tao on 2017/7/30.
*/
public class MyLeetcode {
public static void main(String[] args) {
double base = 3;
int exp = 5;
double res = Power(base,exp);
System.out.println(res);
}
private static double Power(double base, int exp) {
if (equals(base,0.0)) {
return 0.0;
}
if (exp < 0) {
base = 1 / base;
exp = -exp;
}
double result = PowerExp(base,exp);
return result;
}
private static double PowerExp(double base, int exp) {
if (exp == 0) {
return 1;
}
if (exp == 1) {
return base;
}
double res = PowerExp(base,exp>>1);
res *= res;
if ((exp & 1) == 1) {
res *= base;
}
return res;
}
private static boolean equals(double base, double v) {
if ((base-v > 0.0000001) || (base-v < -0.0000001)) {
return false;
} else {
return true;
}
}
}