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

递归实现两数求和匹配函数莫名返回None问题排查

问题出在递归调用的返回值传递上!

嘿,这是递归入门时非常容易踩的坑——你的递归逻辑确实找到了正确的结果,但你没有把这个结果传递回上层调用,导致最终整个函数返回None。

让我拆解一下问题核心:

  • 当你的代码在else分支里调用sum_pairs(ints, s, a, b=b+1)或者sum_pairs(ints, s, a=a+1, b=a+2)时,你只是执行了递归函数,但没有把它的返回值return出去。
  • 举个例子:假设递归到某一层找到了符合条件的[x,y]并返回了这个列表,但它的上层调用只是触发了递归,没有把这个结果继续返回给更上层,直到最外层函数,因为没有遇到有效的return语句,就默认返回了None。

修正后的代码

你只需要在递归调用的地方加上return,把下层的结果传递回来即可:

def sum_pairs(ints, s, a=0, b=1):
    if a == len(ints)-1 or b > 666:
        return None
    if b < len(ints):
        print(s, a,b,[ints[a],ints[b]], ints[a] + ints[b])
        if ints[a] + ints[b] == s:
            x = ints[a]
            y = ints[b]
            print([x,y], type([x,y]), [x,y] is None)
            return [x, y]
        else:
            # 加上return,把递归结果传递回上层
            return sum_pairs(ints, s, a, b=b+1)
    else:
        # 同样加上return,传递递归结果
        return sum_pairs(ints, s, a=a+1, b=a+2)

为什么这样改有效?

每一层递归调用的结果都需要被上层接收并返回,这样当最底层的递归找到正确的列表时,这个结果会沿着调用链一步步传回最外层函数,最终返回给调用者,而不会丢失在递归层级里。

你之前的测试里看到[x,y] is None是False,说明那一层确实生成了正确的列表,但因为上层没有return这个递归结果,所以这个列表没有被传递出去,最终最外层函数没有得到有效返回值,就返回了默认的None。

内容的提问来源于stack exchange,提问作者Aaron Bergfeld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:47:35