《剑指Offer》-16-数值的整数次方

发布时间 2023-08-17 15:21:13作者: YaosGHC

将 n 次相乘的幂运算转化为 log2N 次平方运算,并且采用递归算法

原书给出的最优算法本身不处理负数,是外层函数处理的

	double myPow(double x, int n) {
		double res = pow(x, abs(n));
		if (n < 0)res = 1 / res;
		return res;
	}

	double pow(double x, int n) {
		if (n == 0)return 1;// 不管是奇数还是偶数,最终移位运算会得到0,也就是n最终=0
		// 这里我们是用移位运算替代了/2运算
		// if (n == 1)return x;
		double res = myPow(x, n >> 1);// 自顶向下分解为 log2n 次平方操作
		res *= res;// 自底向上平方 log2n次
		// 比如3和2都是右移1次变成1,两次变成0,所以最后对于奇数次的情况需要补一次,同时也是最外层的底数本身
		if (n & 1)res *= x;
		return res;
	}