递归函数,用于打印整数的二进制表示

时间:2012-02-21 03:54:34

标签: python recursion

所以我已经启动了代码,我知道'else'之后的所有内容可能都是错误的:

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

我确实需要打印二进制表示而不是返回的功能。

3 个答案:

答案 0 :(得分: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]

如果你真的想要一个字符串,它就像这样简单::)。

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

当然,既然你已经发现了函数bin,那么你应该首先做到这一点:

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

这让我想起了这个:

快乐的编码! :)

答案 1 :(得分:2)

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


print binary(9)

return而不是print s,但通常会更好。

答案 2 :(得分: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.