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
哪个是相反的,但是正确的。 为什么会发生这种情况,我该如何解决?
答案 0 :(得分:3)
您需要撤消追加字符串的方式。
return dec2binr(n//2) + str(n%2)
问题是,n%2
将读取最低位,但是您将其附加到字符串的左侧,这是最重要的位置。
答案 1 :(得分:2)
之所以发生这种情况,是因为你在每次返回时都会反转,这会使这些位混乱。从递归返回时不反转,或者在返回最终结果时反向(提示:辅助函数)。