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

LeetCode390递归求解返回值重置问题咨询

问题说明

使用递归方法求解LeetCode第390题时,代码前期执行逻辑符合预期,但触发递归终止条件len(arr)==1时,最终返回结果异常。经初步排查,递归栈回溯到上层调用时预期的返回值没有被正确传递,当前不追求最优效率解法,仅需要明确该场景下递归的运行逻辑,解决返回值异常的问题。

原始问题代码
class Solution:
    def lastRemaining(self, n: int) -> int:
        run_number=1
        arr=[x for x in range(1,n+1)]
        res=0
        def helper(arr,run_number,res):
            if len(arr)==1:
                res=arr[0]
                print(type(res))
                print(res)
                return res
            elif run_number%2==1:
                arr = [v for i, v in enumerate(arr) if i % 2 == 1]
                print(arr)
                run_number+=1
                helper(arr,run_number,res)
            else:
                arr = [v for i, v in enumerate(arr) if i % 2 == 0]
                print(arr)
                run_number+=1
                helper(arr,run_number,res)
        print(type(helper))        
        x=helper(arr,run_number,res)
        return x
调试参考截图

调试截图

问题根因

代码存在两个核心错误:

  • 递归调用未传递返回值:两个分支中仅调用了helper(),但没有用return将递归调用的结果返回给上一层。Python中函数如果没有显式return语句,默认返回None,因此只有最底层触发终止条件的递归层返回了正确值,上层所有递归调用都没有接住下层的返回值,最终最外层拿到的结果为空,并非res被重置为0。
  • 冗余的res参数:Python中整数是不可变类型,函数内部对形参res的赋值仅会修改当前函数栈帧内的局部变量,不会影响外层变量,传入这个参数没有实际作用。
修复方案

移除冗余的res参数,在所有递归调用位置前添加return,保证下层计算的结果可以逐层向上传递到最外层调用。
修复后可正常运行的代码:

class Solution:
    def lastRemaining(self, n: int) -> int:
        run_number = 1
        arr = [x for x in range(1, n+1)]
        def helper(arr, run_number):
            if len(arr) == 1:
                return arr[0]
            elif run_number % 2 == 1:
                arr = [v for i, v in enumerate(arr) if i % 2 == 1]
                run_number += 1
                return helper(arr, run_number)
            else:
                arr = [v for i, v in enumerate(arr) if i % 2 == 0]
                run_number += 1
                return helper(arr, run_number)
        return helper(arr, run_number)

递归返回值的核心规则:递归的计算结果是从最底层终止条件开始逐层向上返回的,每一层调用都必须显式返回下一层调用的结果,否则计算结果会在中间层丢失,无法传递到最外层。

内容的提问来源于stack exchange,提问作者Spurthy Mutturaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:48:48