2020.04.30
题目:
实现函数double power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
点击链接
解题思路:
暴力思路(不推荐):循环求解,注意指数为负数的情况
思路一:用递归的方式
首先我们考虑一个数学问题
我们以2为底以5为指数为例,相当于2的2次幂2的2次幂2,这样大幅减少运算次数,从循环5次降到3次。
一、首先我们判断指数是不是正数,取其绝对值。
二、抛入递归运算,注意的是如果指数是负数,应该在最外层的递归中 乘 它本身的底数。
三、如果指数为负数,取其递归结果的倒数。
前辈写的代码中有针对不合法情况的健壮性代码,我这里为了方便理解去掉啦。
package offer11;
public class Test {
public static void main(String[] args) {
System.out.println(power(2, 5));
System.out.println(power(2, 0));
System.out.println(power(2, -1));
}
public static double power(double base, int exponent) {
double result;//结果记录
int exp;//处理正负指数记录
if(exponent<0) {
exp = -exponent;
}else {
exp = exponent;
}
result = powerRecursive(base, exp);
if (exponent < 0) {
result = 1 / result;
}
return result;
}
public static double powerRecursive(double base, int exponent) {
double result;
if(exponent == 0) {
return 1;
}
if(exponent == 1) {
return base;
}
result = powerRecursive(base, exponent >> 1);//>>1相当于除2
result *= result;
if(exponent % 2 == 1) {
result *= base;
}
return result;
}
}