You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:57:02