我想编写一个递归方法函数,它将非负整数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)
谢谢
答案 0 :(得分:3)
您需要自己完成这些元素:
if integer & 1 == 1: # & is the binary and. & 1 will give the lowest bit
# there is a 1 in the end
integer = integer // 2 # loose one bit in the end
# or
integer = integer >> 1 # loose one bit in the end
告诉我你是否需要更多的意见。
您的代码适合我:
>>> def numOnes(n):
# base case
if n==0:
return (0)
elif n == 1:
return (1)
# recursive case
else:
return numOnes(n//2)+numOnes(n%2)
>>> numOnes(0b1100011)
4
答案 1 :(得分:0)
对于两种基本情况,您使用print
代替return
。修复它,它会工作:
In [2]: numOnes(15842)
Out[2]: 9
In [3]: bin(15842).count('1')
Out[3]: 9