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

递归函数移除列表中指定倍数元素的代码错误排查与修正

递归函数removeMultiples的错误分析与修正

需求回顾

编写递归函数,接收数字n和列表,返回剔除所有n的倍数后的列表。示例调用:
removeMultiples(2, [2,3,4,5,6,7,8,9]),预期输出:[3,5,7,9]

你的代码存在的错误

def removeMultiples(x, arr):
    if not arr:
        return []
    else:
        if arr[0] % x == 0:
            del arr[0]
            return removeMultiples(arr[1:], x)
        return x, arr
  • 参数顺序颠倒:递归调用时把arr[1:]和x的位置传反了,导致后续调用中x变成列表、arr变成数字,直接触发类型错误。
  • 不必要修改原列表:使用del arr[0]修改了输入的原列表,这属于不必要的副作用,而且切片arr[1:]已经取了剩余元素,del操作完全多余。
  • 返回值类型错误:当元素不是倍数时,返回了元组(x, arr),但我们需要的是列表类型的结果,这完全不符合预期。

修正后的代码

def removeMultiples(x, arr):
    # 递归终止条件:空列表直接返回空
    if not arr:
        return []
    first_element = arr[0]
    if first_element % x == 0:
        # 当前元素是倍数,跳过,递归处理剩余列表
        return removeMultiples(x, arr[1:])
    else:
        # 当前元素不是倍数,保留它并拼接剩余列表的处理结果
        return [first_element] + removeMultiples(x, arr[1:])

测试示例调用:

print(removeMultiples(2, [2,3,4,5,6,7,8,9]))  # 输出 [3,5,7,9]

内容的提问来源于stack exchange,提问作者John Mirasol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:21:37