2

非負の整数 n を入力として取り、n のバイナリ表現で 1 の数を返す再帰メソッド関数を作成したいと考えています。これは、n//2 (整数除算) の表現における 1 の数に、n が奇数の場合は 1 を加えたものに等しいという事実を使用するように指示されています。

    Usage:
    >>> ones(0)
    0
    >>> ones(1)
    1
    >>> ones(14)
    3

わかりましたので、これは私がこれまでに取得したコードですが、まだ機能しません。nとして何を入力しても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)

ありがとうございました

4

2 に答える 2

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
于 2013-05-28T16:13:13.283 に答える