如何修复Python实现的bears递归函数的无限递归错误?
问题原因
- 触发无限递归的核心问题出在可被3/4整除的分支逻辑:当输入数字的个位为0时,计算得到的「最后两位数字乘积」为0,执行
n - 0后得到的还是原数n,直接递归调用参数完全相同的bears(n),数值没有任何收敛,就会陷入无限递归。 - 额外的逻辑冗余:原代码中
math.floor((n % 100) / 10)可以简化为整数运算(n % 100) // 10,不需要导入math库。
修复方案
- 对3/4整除的分支增加前置判断:只有当最后两位乘积大于0时,才执行递归调用,从根源避免减0回到原数的死循环场景;
- 简化最后两位乘积的计算逻辑,移除不必要的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
相关产品推荐
相关产品推荐

