题目描述: 实现 pow(x, n) 函数,即实现 x 的 n 次幂函数
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.00000, -2
输出: 0.25000
这道题直接暴力累乘会超时,比较多用的是快速幂算法,将所求的幂次折半计算,例如:24=22×22,2^4 = 2^2 \times 2^2, 24=22×22, 25=22×22×22^5=2^2\times2^2\times225=22×22×2只需要判断幂次的奇偶即可,因为每用一次幂次折半,所以时间复杂度从 O(n) 降到了 O(logn)。下面是我的递归实现:
def myPow(x, n):
if n == 0:
return 1.0
if n < 0:
x = 1/x
n = -n
def fast(x, n):
if n == 0:
return 1.0
temp = fast(x, n//2)
if n % 2 == 0:
return temp * temp
else:
return temp * temp * x
return fast(x, n)