快速幂 递归实现
计算一个double
的整数次方,有很多种方法
可以使用一个循环,乘n次,时间复杂度为O(n)
快速幂可以实现复杂度为O(log2n)
求取浮点数x
的n
(整数)次方,可以转换为求取x
的n/2
(整除)次方,因为不论n是奇数还是偶数,都有
xn = xn/2 * xn/2 (n为偶数)
xn = xn/2 * xn/2 * x (n为奇数)
例:求取28
一般朴素算法是:
28 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
快速幂是:
28 = 24 * 24
24 = 22 * 22
22 = 21 * 21
21 = 20 * 2 (递归终止条件:n==0)
可以看到时间复杂度控制在O