|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
>>> def isPowerOfTwo(n):
... if n > 0:
... if n == 1:
... return True
... if n % 2 == 1:
... return False
... return isPowerOfTwo(n/2)
... else:
... return False
...
>>> isPowerOfTwo(1)
True
>>> isPowerOfTwo(0)
False
>>> isPowerOfTwo(8)
True
这道题小甲鱼说解析:if n % 2 == 1 这句虽然不要也可以,但是有它可以极大地提高代码的工作效率。
但是如果没有这一项,isPowerOfTwo(9),再到isPowerOfTwo(4.5),它会陷入无限循环中,就错了。
>>> isPowerOfTwo(9)
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
isPowerOfTwo(9)
File "<pyshell#35>", line 7, in isPowerOfTwo
return isPowerOfTwo(n/2)
File "<pyshell#35>", line 7, in isPowerOfTwo
return isPowerOfTwo(n/2)
File "<pyshell#35>", line 7, in isPowerOfTwo
return isPowerOfTwo(n/2)
[Previous line repeated 1023 more times]
RecursionError: maximum recursion depth exceeded
如果移除 `if n % 2 == 1` 条件,当你调用 `isPowerOfTwo(9)` 时,代码会计算 `isPowerOfTwo(4.5)`,然后 `isPowerOfTwo(2.25)`,如此继续下去,`n` 会陷入在两个小于1的数字之间无限递归,导致 `RecursionError`。
就像Al说的这样
|
|