【发布时间】:2013-05-23 14:16:37
【问题描述】:
我想写一个递归方法函数,它接受一个非负整数 n 作为输入,并返回 n 上二进制表示中 1 的个数。我被指示使用这样一个事实,即这等于 n//2(整数除法)表示中 1 的数量,如果 n 为奇数,则加 1。
Usage:
>>> ones(0)
0
>>> ones(1)
1
>>> ones(14)
3
好的,这是我目前得到的代码,但它仍然无法正常工作。无论我输入什么,它都会给我 0。
def numOnes(n):
# base case
if n==0:
print (0)
elif n ==1:
print (1)
# recursive case
else:
return numOnes(n//2)+numOnes(n%2)
谢谢
【问题讨论】:
-
你可以写
bin(n).count('1')。你知道吗?没有理由让它递归。无论如何,你应该自己尝试一下。 -
如果将整数除以 2,则将数字的二进制表示向右“移动”一位,丢失最右边的位。例如二进制 101 是 5;除以 2 二进制 10 是 2。
标签: recursion python-3.x binary