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

递归向有序列表插入指定数字的问题排查与解决

递归插入有序列表的错误修正

你的代码尝试通过递归将数字插入有序列表的对应位置,但运行结果不符合预期,输出为 [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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:01:09