class Solution:
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n==0:
return 1
if n<0:
minus = True
else:
minus = False
n = abs(n)
if n==1:
ret = x
else:
ret = self.myPow(x, n//2)
ret = ret*ret
if n&1:
ret *= x
if minus:
return 1/ret
else:
return ret
这是在做leetcode50,我第一次在类方法里用递归。一开始我直接调用myPow(),结果报错“TypeError: myPow() missing 1 required positional argument: ‘n’ ”,很显然是少传了参数self。
然后我居然改成Solution.myPow()(没经大脑),这其实相当于什么都没改,应该是Solution的实例.myPow()(相当于Solution.myPow(实例,x,n))。所以递归中应该写self.myPow(),在外面调用应该先产生一个Solution的实例再调用。
之后我看了别人的解答,发现自己的代码写得其蠢无比:
class Solution:
def myPow(self, x, n):
"""
:type x: float
:type n: int
:rtype: float
"""
if n==0:
return 1
if n<0:
n = -n
x = 1/x
return x*self.myPow(x*x, n//2) if n&1 else self.myPow(x*x, n//2)
这样代码简洁很多。