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