简单的递归二进制转换器错误

时间:2012-06-01 15:49:32

标签: python recursion binary

def dec2binr(n):
    if n == 1:
        return '1' 
    else: return (str(n%2)+dec2binr(n//2))[::-1]

如果没有[:: - 1],它将返回反转的正确二进制数。 [:: - 1]在这种情况下不起作用 - 对于n = 40,我得到:

011000  

我希望

101000  

没有[:: - 1]我得到了

000101

哪个是相反的,但是正确的。 为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:3)

您需要撤消追加字符串的方式。

return dec2binr(n//2) + str(n%2)

问题是,n%2将读取最低位,但是您将其附加到字符串的左侧,这是最重要的位置。

答案 1 :(得分:2)

之所以发生这种情况,是因为你在每次返回时都会反转,这会使这些位混乱。从递归返回时不反转,或者在返回最终结果时反向(提示:辅助函数)。