如何在使用朴素递归将十进制数字转换为二进制数字时捕获第一位数字?
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, ''))
但是当我调用它时,我可以在输出中看到二进制数的第一位没有被捕获。
我运行两个测试用例:
对于数字 28,预期输出应该是 00111
但输出是 0111
:
对于数字 5,输出应该是 101 但输出是 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
的结果才能获得正确的二进制字符串。
我正在尝试使用递归按以下方式将十进制数转换为二进制数。
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, ''))
但是当我调用它时,我可以在输出中看到二进制数的第一位没有被捕获。 我运行两个测试用例:
对于数字 28,预期输出应该是 00111
但输出是 0111
:
对于数字 5,输出应该是 101 但输出是 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
的结果才能获得正确的二进制字符串。