计算x的n次幂

首先需要考虑的是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);
	}
}

测试截图为:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值