2012-02-21 25 views
1

はので、私はコードを開始している、と私は「他」の後にすべてが、おそらく間違っていることを知っている:再帰関数は

def binary(n): 
    if n < 2: 
     print (n) 
    else: 
     x = (bin(int(n)//2) 
     print (x) 

それが再帰的にこれを行う必要があります。

>>> binary(0) 
0 
>>> binary(1) 
1 
>>> binary(3) 
11 
>>> binary(9) 
1001 

私はの印刷への関数を必要とします。

+0

再帰はどこですか? –

+0

pythonを使用している場合、なぜbinを使用しないのですか? [1]:bin(9) Out [1]: '0b1001' – avasal

+0

バイナリ関数を使用して@Ignacioビルトイン関数を組み込みました。 –

答えて

3

これは2つの場所にプリントを持っているとして、あなたは例えば、複数の行で終わるだろう、動作しません。

>>> def binary(n): 
... if n < 2: 
...  print n 
... else: 
...  binary(n/2) 
...  print n % 2 
... 
>>> binary(0) 
0 
>>> binary(1) 
1 
>>> binary(3) 
1 
1 
>>> binary(9) 
1 
0 
0 
1 
>>> binary(10) 
1 
0 
1 
0 

他の回答を使用します文字列なので、ここにリストがあります:

>>> def binary(n): 
... if n < 2: 
...  return [n] 
... else: 
...  return binary(n/2) + [n % 2] 
... 
>>> binary(0) 
[0] 
>>> binary(1) 
[1] 
>>> binary(3) 
[1, 1] 
>>> binary(9) 
[1, 0, 0, 1] 
>>> binary(10) 
[1, 0, 1, 0] 

実際に文字列が必要な場合は、それは、このような単純なのです:

>>> bin(10)[2:] 
'1010' 

どのようにこの::)もちろん

>>> ''.join(map(str, binary(10))) 
'1010' 

、すでに機能bin知ったきたことから、おそらく最初の場所でこれを行っている必要がありますこののことを思い出す:

ハッピーコーディング! :)

+0

あなたが提供した最初の解決策はありますか?私は "print(n%2、end = '')を試みたが、うまくいかなかった。 – AngelE

+0

nvm私はそれを得た:D – AngelE

2
def binary(n): 
    if n < 2: 
     return n 
    else: 
     return str(binary(n/2)) + str(n % 2) 


print binary(9) 

それreturnの代わりにprint Sが、通常はそれが良いでしょう。

+0

うーん、私はこれを試してみましたが、私は「バイナリ(3)」 です>>>(3)「None1」 – AngelE

+0

@AngelEバイナリしようとすると、結果は私が手に:私はしていない - 私は「11」を取得 – amindfv

+0

本当ですか?なぜ私が働いていないのだろうか。私はpython 3.0を持っています – AngelE

0

直接印刷する代わりに文字列を返すようにすると、作業がはるかに簡単になります。このように:予想通り

def binary(n): 
    s = str(n % 2) 

    if n >> 1 > 0: 
     s += binary(n >> 1) 

    return s 

print binary(9) 

Here's a demo.