快速幂运算

1. 我们在进行计算x的n次方的时候需要一般采用累乘的方式来进行计算的,但是我们可以采用平方的方式来降低程序的时间复杂度进而提高我们程序运行的效率

2. 这个时候需要采用一个变量exponent 来计算当前计算了指数多少次了,采用平方的方式我们在循环可以在循环中求解出偶次幂的运算,因为每一次我们平方之后指数都为原来指数的两倍,比如:

 while((exponent << 1) < n){
       temp *= temp;
       exponent = exponent << 1;
 }

那么剩下来的n - exponent次幂我们可以采用递归的方式来帮助我们进行求解,递归的出口为当n = 0或者n = 1的时候那么我们就可以退出递归调用了

3. 具体的代码如下:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int n = sc.nextInt();
        long res = exp(x, n);
        System.out.println(res);
        sc.close();
    }

    private static long exp(int x, int n) {
        //递归的出口
        if(n == 0) return 1;
        if(n == 1) return x;
        long res = 1;
        long temp = x;
        int exponent = 1;
        while((exponent << 1) < n){
            temp *= temp;
            exponent = exponent << 1;
        }
        //递归调用求解剩下来的x的n-exponent次幂
        res *= exp(x, n - exponent);
        return res * temp;
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值