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;
}
}