递归实现十进制转二进制时字符串返回报错求助
问题分析与修复
你的代码报错原因很明确:to_binary函数返回的是字符串类型,但你在else分支里试图将它和整数做算术运算。具体来说:
to_binary(int(d // 2))返回的是字符串,10 * 字符串本身就是非法操作- 就算上面的操作合法,
d % 2是整数,整数和字符串相加也会触发unsupported operand type(s) for +: 'int' and 'str'错误
递归实现十进制转二进制的核心逻辑应该是字符串拼接,而非数值计算——每次递归获取高位的二进制字符串,再把当前位的二进制字符拼在后面。
修复后的代码
def to_binary(d): if d == 0: return "0" # 当d是1时,直接返回"1",避免拼接出多余的前置0 elif d // 2 == 0: return str(d % 2) else: # 先递归获取高位二进制字符串,再拼接当前位 return to_binary(d // 2) + str(d % 2) # 测试示例 nums = 5 result = to_binary(nums) print("Result: " + result) # 输出 Result: 101
逻辑说明
- 当输入为0时,直接返回"0"(处理边界情况)
- 当输入为1时,直接返回"1"(避免递归到0后拼接出"01")
- 对于大于1的数,先递归处理
d//2(获取高位二进制),再将当前位d%2转成字符串拼接到结果末尾
内容的提问来源于stack exchange,提问作者sandy neo
相关产品推荐
相关产品推荐

