【问题标题】:Recursive method function that counts binary 1s of an integer计算整数的二进制 1 的递归方法函数
【发布时间】: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


【解决方案1】:

这些元素你需要自己动手:

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

【讨论】:

  • 我稍微更新了代码 - 仍然没有发现问题
【解决方案2】:

对于这两种基本情况,您使用 print 而不是 return。修复它,它会工作:

In [2]: numOnes(15842)
Out[2]: 9

In [3]: bin(15842).count('1')
Out[3]: 9

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2014-07-14
    • 2015-07-09
    • 2014-02-13
    • 2017-07-11
    • 2018-09-15
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多