簡體   English   中英

如何在使用朴素遞歸將十進制數字轉換為二進制數字時捕獲第一位數字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM