[英]How to capture the first digit while converting a decimal number to binary digit using naive recursion?
我正在嘗試使用遞歸按以下方式將十進制數轉換為二進制數。
def getbin(x: int, s: str):
if int(x/2) > 0:
y = int(x/2)
s += str(y % 2)
print(f'int(x/2): {int(x/2)}, y: {y}, st: {s}')
getbin(y, s)
elif int(x/2) == 1:
s += '11'
return s
if __name__ == '__main__':
print(getbin(28, ''))
但是當我調用它時,我可以在 output 中看到二進制數的第一位沒有被捕獲。 我運行了兩個測試用例:
對於數字 28,預期的 output 應該是00111
但 output 是0111
:
對於數字 5,output 應該是 101 但 output 是01
誰能讓我知道我在這里犯的錯誤是什么,我該如何糾正?
您的問題是您正在針對x/2
而不是針對x
進行測試。 因此,您丟失了結果中最重要的部分。 嘗試這樣的事情:
def getbin(x: int, s: str):
s += str(x % 2)
y = x // 2
if y > 0:
return getbin(y, s)
return s
另請注意,您需要反轉getbin
的結果才能獲得正確的二進制字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.