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

两数之和(Two Sum)递归实现异常,无法返回符合要求的下标对

两数之和递归实现问题排查

预期代码输出数字4和2对应的下标[0, 2],因为4 + 2 = 6正好等于目标值target,但实际运行后初始代码返回的下标是[0, 1]。

初始版本代码及问题

初始实现代码如下:

nums = [4, 3, 2]
target = 6
        
total=0     
s=[]
k=[]
def two(i, total):
    if i== 2 or total == target:
        k.append(s.copy())
        return
        
    if i>=2 and total != target:
        return False
    
    s.append(i)
    two(i+1, nums[i]+nums[i+1])

two(0,  0)
print(k)

初始代码问题点:

  • 终止条件逻辑错误:只要遍历到下标2,无论当前累加和是否等于目标值都会把当前下标组合存入结果,这是返回错误组合[0,1]的直接原因
  • 配对逻辑有遗漏:递归仅计算相邻下标的元素和,没有覆盖0和2这类不相邻下标的配对场景
  • 递归分支不完整:仅实现了选中当前下标继续遍历的逻辑,没有跳过当前下标遍历后续元素的分支,无法覆盖所有可能的两数组合

调整后版本代码

调整后的代码可正常处理长度为3的输入:

s=[]
def two_sum(target, nums, i, j):
    if j==len(nums):
        return []
    if nums[i]+nums[j] == target:
        s.append(i)
        s.append(j)
        return s
    
    if j>len(nums):
        return False
        
    for i in range(len(nums)):
        return two_sum(target, nums, i, j+1) or two_sum(target, nums, i+j, j+1)

优化提示

调整后的版本仍存在全局变量污染、下标越界风险、长数组适配性差的问题,可进一步补全递归遍历分支,移除全局变量存储结果的逻辑,或者直接使用哈希表的迭代实现,时间复杂度可优化到O(n)。

内容的提问来源于stack exchange,提问作者Oussama Fykon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:06