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

如何用递归求列表中排除3或7倍数的整数和?附代码修正

问题分析与代码修正

原代码存在的问题

  • 提前终止递归:当遇到第一个能被3或7整除的元素时,直接返回当前sum,导致后续元素完全没有处理。比如测试列表中的3会触发这个逻辑,直接返回0,后面的5、7、9都没参与计算。
  • 修改原列表:使用numList.pop()会原地修改传入的列表,函数执行后原列表会被清空,产生不必要的副作用。
  • 缺少终止返回:当列表为空时,函数没有明确的返回值,会默认返回None,这在递归的最后一步会导致错误。

修正后的代码

def SumSkip37(numList, sum_val=0):
    # 终止条件:列表为空时返回累计的和
    if not numList:
        return sum_val
    # 取第一个元素(不修改原列表),剩下的列表用切片传递
    current = numList[0]
    remaining = numList[1:]
    if current % 3 == 0 or current % 7 == 0:
        # 跳过当前元素,继续递归处理剩余列表
        return SumSkip37(remaining, sum_val)
    else:
        # 累加当前元素,继续递归
        return SumSkip37(remaining, sum_val + current)

numList = [1, 3, 5, 7, 9]
print(f'The result is {SumSkip37(numList)}.')
# 原列表不会被修改,验证:print(numList) 输出 [1,3,5,7,9]

代码说明

  • 用numList[0]取第一个元素,numList[1:]获取剩余元素,避免修改原列表。
  • 遇到需要跳过的元素时,直接递归处理剩余列表,不终止整个流程。
  • 明确终止条件:当列表为空时返回累计的和,确保递归有正确的返回值。
  • 把参数sum改成sum_val,避免和内置函数sum()重名,提升代码可读性。

测试上述代码,输出结果为The result is 6.(1+5=6,3、7、9被跳过),符合预期。

内容的提问来源于stack exchange,提问作者Richard Coterie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:10:50