递归函数移除列表中指定倍数元素的代码错误排查与修正
递归函数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
相关产品推荐
相关产品推荐

