设置了while条件的Python二进制转十进制代码为何仍出现递归超限错误
二进制转十进制代码RecursionError报错原因及修复方案
报错核心原因
- 递归调用无终止条件且入参固定:每次递归调用
binary_into_decimal都传入完全相同的useful_number和length_of_string,同时函数开头会强制把working_length重置为0,递归会无限重复执行,完全不受外层while循环的约束,最终超过Python默认的递归深度上限抛出错误。 - 逻辑设计冲突:同时混用循环和递归两种实现思路,没有必要且大幅提升了逻辑出错概率。
- 缺失返回逻辑:现有代码没有累加结果、返回最终十进制值的逻辑,即使递归不报错也无法得到正确输出。
修复实现
纯递归实现(符合原代码想写递归的思路)
def binary_into_decimal(useful_number, current_idx=0): # 递归终止条件:所有二进制位都处理完成 if current_idx == len(useful_number): return 0 current_bit_val = int(useful_number[current_idx]) power = len(useful_number) - 1 - current_idx # 累加当前位的值 + 后续位的计算结果 return current_bit_val * (2 ** power) + binary_into_decimal(useful_number, current_idx + 1) # 调用示例 print(binary_into_decimal("1011")) # 输出11
循环迭代实现(无递归深度限制,性能更稳定)
def binary_into_decimal(useful_number): decimal_result = 0 for bit in useful_number: decimal_result = decimal_result * 2 + int(bit) return decimal_result # 调用示例 print(binary_into_decimal("1011")) # 输出11
内容的提问来源于stack exchange,提问作者Sofiia Zinchenko
相关产品推荐
相关产品推荐

