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

Python递归合并两个有序数组:基例未执行返回None问题排查

问题分析与修复

核心问题

你的代码存在两个关键问题,导致最终输出异常:

  1. 递归调用未返回结果:在处理元素比较的递归分支中,调用merge后没有返回该调用的结果,上层函数执行完递归后无返回值,最终整个函数返回None。
  2. 切片追加方式错误:基例中使用new_arr.append(arr2[j:])会把整个子列表作为单个元素插入new_arr,而非将子列表元素逐个添加,最终结果会出现嵌套列表。

修复后的代码

def merge(arr1, arr2, i=0, j=0):
    new_arr = []
    # 基例:arr1已遍历完毕
    if i >= len(arr1):
        return new_arr + arr2[j:]
    # 基例:arr2已遍历完毕
    if j >= len(arr2):
        return new_arr + arr1[i:]
    
    if arr1[i] < arr2[j]:
        new_arr.append(arr1[i])
        return new_arr + merge(arr1, arr2, i+1, j)
    else:
        new_arr.append(arr2[j])
        return new_arr + merge(arr1, arr2, i, j+1)

sortedarr = merge([1,9], [3,7,11,14,18,99])
print(sortedarr)

修复说明

  • 移除全局变量:将new_arr、i、j改为函数内部变量或默认参数,避免全局状态干扰递归流程,让逻辑更独立。
  • 传递递归结果:每次递归调用时,将当前new_arr与递归返回的结果拼接后返回,确保每一层的结果都能向上传递。
  • 正确拼接剩余元素:基例中用new_arr + arr2[j:]的方式直接拼接剩余元素,避免嵌套列表问题,同时直接返回完整结果。
  • 简化边界判断:用i >= len(arr1)替代i > len(arr1)-1,逻辑更直观易懂。

运行修复后的代码,输出结果为:

[1, 3, 7, 9, 11, 14, 18, 99]

内容的提问来源于stack exchange,提问作者Soumyadyuti Nandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:41