题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
解题思路
这题比较简单, 最简单的方法是遍历一个乘一个, 但是这样会很慢, 这里使用的x-> x的2次幂-> x的4次幂 ->x的8次幂>…->x的次幂, 直接用原有答案的平方去做,直接用递归去处理,如果n是奇数则答案应该是 x的n-1次幂再乘以x, 如果为偶数则答案就是x的n次幂, 先做个只有正数的递归,我们的n必定是越来越少的, 直到n==0, 任何数的0次幂都是1, 所以这里递归的判断就是n为0,直接返回1即可, 然后x**2的输出就是递归产出的quickCalc(x, n/2)的平方,最后区分下n可能为奇偶的情况,最后递归函数就完成了, 然后最后在一开始加上判断因为题目中的n可能为负数,具体代码如下。
Java代码实现
public class MyPow {
public double myPow(double x, int n) {
if(n == 0){
return 1;
}else if(n > 0){
if(n %2 == 1){
return quickCalc(x, n - 1) * x;
}else{
return quickCalc(x, n);
}
}else{
if(n %2 == 1){
return 1 / quickCalc(x, Math.abs(n) - 1) * x;
}else{
return 1/ quickCalc(x, Math.abs(n));
}
}
}
private double quickCalc(double x, int n) {
if(n == 0){
return 1;
}
double res = quickCalc(x, n/2);
if(n % 2== 0){
return res * res;
}else{
return res * res * x;
}
}
}