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

Python递归调用中return的作用机制及场景疑问

递归函数中return的作用差异:列表反转vs求和

我写了两个用递归反转列表的Python函数,Function 1在递归调用前加了return,导致递归返回后后面的代码根本没执行;Function 2删掉return后,就能正常输出反转后的内容。同时我有个疑问:为什么列表求和的递归函数必须用return,而这个反转列表的递归却不需要?

Function 1(带return,执行异常)

a=[1,5]
def rev(k,i):
    
    if i==len(k)-1:
        print("in base case {}".format(i))
        print(a[i])
        print("Return from base case")
    else:
        print("in else before recur call  {}".format(i))
        return rev(k,i+1)
        print("in else after recur call  {}".format(i))
        print(a[i])
rev(a,0)

输出(Function 1)

in else before recur call  0
in base case 1
5
Return from base case

Function 2(去掉return,执行正常)

a=[1,5]
def rev(k,i):
    
    if i==len(k)-1:
        print("in base case {}".format(i))
        print(a[i])
        print("Return from base case")
    else:
        print("in else before recur call  {}".format(i))
        rev(k,i+1)
        print("in else after recur call  {}".format(i))
        print(a[i])
rev(a,0)

输出(Function 2)

in else before recur call  0
in base case 1
5
Return from base case
in else after recur call  0
1

列表求和递归函数示例

def getSum(piece):
    if len(piece)==0:
        return 0
    else:
        return piece[0] + getSum(piece[1:]) 
print(getSum([1, 3, 4, 2, 5]))

问题解答

  1. 为什么Function 1的后续代码不执行?
    Python里return语句的作用是终止当前函数执行,并把值返回给调用者。Function 1的else分支里,return rev(k,i+1)会直接结束当前函数,所以后面的两行print代码永远不会被执行,自然看不到反转的完整输出。

  2. 为什么求和递归需要return,反转这里不需要?
    核心区别在于函数的目的和是否需要传递值:

  • 求和递归的目标是计算并返回列表的总和,每一层递归都需要把当前元素的值,加上下一层递归返回的子列表总和,再把这个结果返回给上层。没有return的话,上层函数拿不到下层的计算结果,根本没法完成求和。
  • 你写的反转函数,只是在递归过程中直接打印元素,它不需要把任何计算结果返回给上层函数——只要递归调用完成后,继续执行当前层的打印操作就行。整个过程不需要传递返回值,所以不需要return。

如果你的反转函数是要生成一个新的反转列表并返回(而不是打印),那同样需要return,比如:

def reverse_list(lst):
    if not lst:
        return []
    return reverse_list(lst[1:]) + [lst[0]]

这种情况下,每一层递归都要把反转后的子列表和当前元素拼接,再返回给上层,必须用return传递这个拼接后的列表。


内容的提问来源于stack exchange,提问作者Amarjeet Kushwaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:29