【发布时间】:2016-03-07 06:51:55
【问题描述】:
我从 leetcode 得到这个代码。
class Solution(object):
def myPow(self, x, n):
if n == 0:
return 1
if n == -1:
return 1 / x
return self.myPow(x * x, n / 2) * ([1, x][n % 2])
这段代码用于实现poe(x, n),在Python中表示x**n。
我想知道为什么它可以实现pow(x, n)。
看起来没有意义……
我明白了
if n == 0:
and
if n == -1:
但核心代码:
self.myPow(x * x, n / 2) * ([1, x][n % 2])
真的很难理解。
顺便说一句,此代码仅适用于 Python 2.7。如果你想在 Python 3 上测试,你应该改变
myPow(x*x, n / 2) * ([1, x][n % 2])
到
myPow(x*x, n // 2) * ([1, x][n % 2])
【问题讨论】:
-
@AnttiHaapala 它被标记为
python-2.x。但是,是的,值得一提。 -
*虽然这被标记为 Python 2,因为它假定
/是地板分区;将/替换为//,它可以在任何地方使用。 -
为什么需要上课?为什么不只是
def myPow(x, n)? -
[1, x][n % 2]可以更清晰地表达为x if n % 2 else 1。
标签: python recursion python-2.x