题目描述:
代码:
public class Design {
static double PowerWithExponent(double base, int exponent) {
// base为0的处理
if (base == 0) {
if (exponent < 0) {
return 0;
} else {
return 1;
}
}
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
int temp = exponent;
if (exponent < 0) {
temp = -temp;
}
double result = PowerWithExponent(base, temp >> 1);
result *= result;
if ((temp & 1) == 1) {
result *= base;
}
if (exponent < 0) {
return 1 / result;
}
return result;
}
static double PowerWithExponentTired(double base, int exponent) {
// base为0的处理
if (base == 0) {
if (exponent < 0) {
return 0;
} else {
return 1;
}
}
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
int temp = exponent;
if (exponent < 0) {
temp = -temp;
}
double result = PowerWithExponentTired(base, temp >> 1) * PowerWithExponentTired(base, temp >> 1);
if ((temp & 1) == 1) {
result *= base;
}
if (exponent < 0) {
return 1 / result;
}
return result;
}
public static void main(String[] args) throws Exception {
double base = -2.0;
for (int i = -100; i < 101; i++) {
double first = PowerWithExponent(base, i);
double second = PowerWithExponentTired(base, i);
if (first != second) {
System.out.println("bad bad");
}
}
}
}
解析:
当为偶数时
当为奇数时
看起来就是个递归,对于需要求两次,如果用递归的话,要避免对求两次,一次递归就可以解决的。参考第一个方法,将递归算出的平方一下即可,比第二种方法好。