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

[::-1] がないと、逆の正しい 2 進数が返されます。この場合、[::-1] は機能しません - n=40 の場合:

011000  

私が期待するとき

101000  

[::-1] がなければ

000101

これは逆ですが、正しいです。なぜこれが起こり、どうすれば修正できますか?

4

2 に答える 2

3

文字列を追加する方法を逆にする必要があります。

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

問題は、n%2最下位ビットを読み取ることですが、最上位の場所である文字列の左側に追加していたことです。

于 2012-06-01T15:52:43.697 に答える
2

これは、 return ごとに反転し、ビットをごちゃ混ぜにするために発生します。再帰から戻るときに元に戻すか、最終結果を返すときにのみ逆にするかのいずれかです (ヒント: ヘルパー関数)。

于 2012-06-01T15:51:55.023 に答える