快速设计一个高效的求a的n次幂的算法
这有两次求a的n次幂的算法
第一种:你会发现是单纯的一直乘下去的方法,不高效。
第二种:利用分治的方法
if (n==0)return 1;
设置边界(ex<<1)<=n
根据ex的2倍数来翻return res*pow(a,n-ex);
递归翻剩下的
public class a的n次幂 {
public static void main(String[] args){
int n=15;
int a = 2;
int res = pow0(a,n);
System.out.println(res);
res = pow(a,n);
System.out.println(res);
}
//第一种
private static int pow0(int a, int n){
int res = 1;
for(int i = 0; i < n; i++){
res*=a;
}
return res;
}
//第二种
private static int pow(int a, int n){
if (n==0)return 1;
int res = a;
int ex = 1;
//能翻
while((ex<<1)<=n){
res = res*res;
//指数
ex<<=1;
}
//不能翻
//差n-ex次方没有取乘到结果里面
return res*pow(a,n-ex);
}
}