递归方法函数,计算整数的二进制1

时间:2013-05-28 14:42:39

标签: recursion python-3.x binary

我想编写一个递归方法函数,它将非负整数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)

谢谢

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