我试图使用递归查找数字是否为2的幂。但是,我似乎无法找出正确的解决方案。到目前为止,这是我尝试过的方法:
def is_power(n):
n = n/2
if n == 2:
return True
elif n > 2:
is_power(n)
else:
return False
if is_power(32):
print 'yes'
else:
print 'no'
由于'32'是2的幂,我希望我的代码返回'yes'作为输出。但是,代码改为输出“ no”。我的代码似乎有什么问题?
最佳答案
elif n > 2:
is_power(n)
缺少
return
:def is_power(n):
n = n/2
if n == 2:
return True
elif n > 2:
return is_power(n)
else:
return False
因此,
is_power
的“第一”级别不返回任何内容(或None
,具体取决于您的检查方式),从而导致输出no
。@kaveman正确指出
is_power(2)
会产生错误的结果。您可以通过在
elif
子句中将2减半来解决此问题:def is_power(n):
if not n == int(n):
return False
n = int(n)
if n == 1:
return True
elif n > 2:
return is_power(n/2.0)
else:
return False
编辑:@will指出我正在将python2与python3部门混在一起。使用
/2.0
可以解决此问题。此外,在对问题的评论中,他指出1是2的幂。检查==1
而不是==2
可以解决此问题。另外,我添加了int
强制转换,对于2的幂次幂是不必要的(因为好了,IEEE754浮点数毕竟是2的幂,所以2的幂次才是可以表示的),但是对于非2的幂,这将使代码可移植。