2012-02-21 73 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 

我確實需要函數print二進制表示而不是返回。

+0

哪裏是遞歸? – 2012-02-21 04:04:32

+0

爲什麼不使用bin如果使用python: In [1]:bin(9) Out [1]:'0b1001' – avasal 2012-02-21 04:22:03

+0

@Ignacio內置bin函數使用他的二進制函數和我們有一個相互的? – 2012-02-21 04:23:51

回答

3

預期這將無法正常工作,因爲你必須在兩個地方打印,您將結束與多條線路,如:

>>> 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

你的回答非常好!對於你提供的第一個解決方案,有沒有方式使它水平打印?我試過「打印(n%2,結束='')但沒有工作。 – AngelE 2012-02-21 05:12:58

+0

nvm我明白了:D – AngelE 2012-02-21 05:24:45

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


print binary(9) 

return s而不是print s,但通常情況會更好。

+0

嗯我試過這個,但是當我嘗試「binary(3)」時得到的結果是 >>> binary(3)'None1' – AngelE 2012-02-21 04:08:16

+0

@AngelE:我沒有 - 我得到「11」 – amindfv 2012-02-21 04:10:37

+0

真的嗎?我想知道爲什麼我的不工作。我有python 3.0 – AngelE 2012-02-21 04:12:50

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.