递归向有序列表插入指定数字的问题排查与解决
递归插入有序列表的错误修正
你的代码尝试通过递归将数字插入有序列表的对应位置,但运行结果不符合预期,输出为 [1, 1, 4, 5]。
问题根源
在嵌套的add_number函数的else分支中,你错误地引用了外层plus_number函数的原始列表lst的首个元素(lst[0]),而非当前递归传入的子列表lst2的首个元素。每次递归都会重复添加原始列表的第一个元素1,导致结果出现重复值。
修复方法
将[lst[0]]替换为[lst2[0]],这样每次递归都会使用当前处理的子列表首元素拼接后续结果,保证逻辑正确。
修复后的完整代码
my_lst = [1, 3, 5] my_num = 4 def new_number(lst): return lst def plus_number(n, lst): def add_number(n2, lst2): # 移除无意义的for循环(原循环仅执行一次就返回,未起到遍历作用) if not lst2: # 处理递归到空列表的边界情况 return [n2] if lst2[0] > n2: return [n2] + lst2 else: return [lst2[0]] + add_number(n2, lst2[1:]) return new_number(add_number(n, lst)) result = plus_number(my_num, my_lst) print(result) >>> [1, 3, 4, 5]
额外说明:原代码中的for i in range(len(lst))循环完全多余,因为循环内部第一次判断就会触发返回,不会执行多次迭代。同时增加空列表判断,避免递归到列表末尾时出现索引越界错误。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

