蓝桥学院2019算法题2.20

题5:设计一个高效的求a的n次幂的算法

算法分析:

1、可以用for循环实现 a*a*a*a*...

2、可以用递归实现 res*pow1(a,n-ex)

 1 package recursion;
 2 
 3 /**
 4  * @author zsh
 5  * @company wlgzs
 6  * @create 2019-02-18 16:30
 7  * @Describe 设计一个高效的求a的n次幂的算法
 8  */
 9 public class Main8 {
10 
11     /**
12      * 循环法求a的n次幂,复杂度O(n)
13      * @param a
14      * @param n
15      * @return 结果
16      */
17     static int pow0(int a,int n){
18         int res = 1;
19         for (int i = 0; i < n; i++) {
20             res = res*a;
21         }
22         return res;
23     }
24 
25     /**
26      * 优化后求a的n次幂
27      * @param a
28      * @param n
29      * @return 结果
30      */
31     static int pow1(int a,int n){
32         if (n == 0){
33             return 1;
34         }
35         int res = a;
36         //指数
37         int ex = 1;
38         while ( 2*ex <= n){
39             res = res*res;
40             ex = ex*2;
41         }
42         //差n-ex次方没有乘到结果上去
43         return res*pow1(a,n-ex);
44     }
45 
46     public static void main(String[] args) {
47         System.out.println(pow0(2,15));
48         System.out.println(pow1(2,15));
49     }
50 }

 

posted @ 2019-02-18 16:49  梨花梦蝶  阅读(174)  评论(0编辑  收藏  举报