繁体   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