思路:使用翻一番的技巧。

比如,2的9次 则 1 * 2 = 2;2 * 2 = 4;4 * 4 =16;16 * 16=。。。;
指数:1-----------2-----------4------------8---------------

对应代码:

能翻倍的情况下

//能翻
while((ex<<1)<n) {
			//翻
			res = res * res;
			//指数实际增长
			ex<<=1;
		}

不能翻倍的情况下
不能翻:则把差值作为指数递归计算。
当差值为0时,就说明到头了,只剩最后一个数字。 return 1 。乘数字本身即可。

return res*pow(a, n-ex);

代码如下

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;
		}
		//不能翻:则把差值作为指数递归计算。
		// 当差值为0时,就说明到头了,只剩最后一个数字。 return 1 。乘数字本身即可。
		return res*pow(a, n-ex);
	}
	
	public static void main(String[] args) {
		System.out.println(pow(2, 3));
	}