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

如何修复Python实现的bears递归函数的无限递归错误?

问题原因
  • 触发无限递归的核心问题出在可被3/4整除的分支逻辑:当输入数字的个位为0时,计算得到的「最后两位数字乘积」为0,执行n - 0后得到的还是原数n,直接递归调用参数完全相同的bears(n),数值没有任何收敛,就会陷入无限递归。
  • 额外的逻辑冗余:原代码中math.floor((n % 100) / 10)可以简化为整数运算(n % 100) // 10,不需要导入math库。
修复方案
  1. 对3/4整除的分支增加前置判断:只有当最后两位乘积大于0时,才执行递归调用,从根源避免减0回到原数的死循环场景;
  2. 简化最后两位乘积的计算逻辑,移除不必要的math库依赖。
修复后代码
def bears(n: int) -> bool:
    if n == 42:
        return True
    elif n < 42:
        return False
    else:
        # 被2整除分支
        if n % 2 == 0 and bears(n // 2):
            return True
        # 计算最后两位数字的乘积
        last_two_product = (n % 10) * ((n % 100) // 10)
        # 被3整除分支,仅乘积大于0时才递归
        if n % 3 == 0 and last_two_product > 0 and bears(n - last_two_product):
            return True
        # 被4整除分支,同理
        if n % 4 == 0 and last_two_product > 0 and bears(n - last_two_product):
            return True
        # 被5整除分支
        if n % 5 == 0 and bears(n - 42):
            return True
    return False

print(bears(250)) # 输出 True
print(bears(60)) # 输出 False
print(bears(200)) # 输出 False

内容的提问来源于stack exchange,提问作者Bob Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:01