今天在做力扣第57题这道题,决定自己动手用递归实现快速幂,我的代码如下:
class Solution:
def myPow(self, x: float, n: int) -> float:
if n > 0:
return self.recur(x, n)
else:
return 1.0 / self.recur(x, -n)
def recur(self, x: float, n: int) -> float:
if n == 0:
return 1.0
else:
y = self.recur(x, n // 2) ** 2
return y if n % 2 == 0 else y * x
但是这代码会出现数字超出范围的异常,最后经过比对发现只要将recur函数中的
y = self.recur(x, n // 2) ** 2
return y if n % 2 == 0 else y * x修改为:
y = self.recur(x, n // 2)
return y*y if n % 2 == 0 else y*y * x就能正常提交,可这是为什么,这两行代码有什么区别吗?
补充提交失败的用例:
x = 2.00000
n = -2147483648