首先需要考虑的是n的正负以及是否为零
可以把正数和归为一类,因为 0 的次幂为 1 ,其他数的 0 次幂也为 1 ,所以需要先判断的n的正负,如果 n 为负的话,则需要负负得正,把 n 负号变为 1 / x*n,代码为:
public static myPow(double x,int n){
if(n < 0){
return 1 / pow(x,-n);
}else{
return pow(x,n);
}
}
当把n的正负判断完以后,就开始进行降幂递归操作,n / 2一直进行递归下去,直到最后n的值为1或0,判断 n 为奇数还是偶数,如果 n 为奇数的话,会返回1.0,于是需要在返回上一层递归时既需要把1.0改为x,也需要在返回递归以后乘以一个x这样n-1就为偶数可以进行除2递归,如果为偶数则直接赋值递归即可,因为需要一个变量 val 来存储值为 1.0 或者 x,只有当n=0时,最后结果才会为1.0 否则当n >= 1时,即使上面返回1.0也不满足n % 2==0 的条件而是执行else语句,以此来实现奇偶的分离,实现代码为:
public static pow(double x,int n){
if(n==0){
return 1.0;
}
if(n==1){
return x;
}
double val = pow(x,n / 2);
if(n % 2 == 0){
return val * val;
}else{
return val * val * x;
}
}
总的测试代码为:
public class demo09{
public static double myPow(double x,int n){
if(n < 0){
return 1/pow(x,-n);
}else{
return pow(x,n);
}
}
private static double pow(double x,int n){
if(n==0){
return 1.0;
}
if(n==1){
return x;
}
double val = pow(x,n/2);
if(n%2==0){
return val*val;
}else{
return val*val*x;
}
}
public static void main(String[] args){
int a=5,n=1;
double c = myPow(a,n);
System.out.println(c);
}
}
测试截图为: