剑指offer(十二)数值的整数次方
2020-03-31 本文已影响0人
向前的zz
数值的整数次方 是为了考察代码完整性
点击进入 牛客网题库:数值的整数次方
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
方法一:直接循环
public double Power(double base, int exponent) {
if(base == 0.0) {
return 0;
}
if(exponent == 0) {
return 1;
}
double tempValue = base;
for(int i = 1; i < Math.abs(exponent); i++ ) {
tempValue *= base;
}
if(exponent < 0) {
tempValue = 1/tempValue;
}
return tempValue;
}
方法二:递归
/**
* 递归的话
* 1. exponent 偶数 result = a^(n/2) * a^(n/2)
* 2,exponent 奇数 result = a^((n-1)/2) * a^((n-1)/2) * a
*
* base 为0 的时候直接返回0
* exponent 为0的时候返回1 1/2 的时候 exponent就为0了
* 考虑为负数的时候 需要返回 1/结果
*
*/
public double Power(double base, int exponent) {
if(base == 0) {
return 0;
}
if(exponent > 0) {
//2为0的时候整除
if(exponent % 2 == 0) {
double result = Power(base, exponent/2);
result *= result;
return result;
} else { //奇数的情况下
double result = Power(base, exponent/2);
result *= result;
result *= base;
return result;
}
} else if(exponent < 0) {
double result = Power(base , -exponent);
return 1/result;
} else {
return 1;
}
}
递归刚开始做的时候不怎么理解,然后再写 exponent 为负数的时候,还忘记 1/结果了,导致还没有通过