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

Python递归函数返回None问题:为何修改return语句后结果正常?

递归函数返回None的原因解析

嘿,这个问题其实是递归编程里很容易踩的小坑,咱们一步步把它捋明白:

1. 原代码为啥返回None?

先看你的good函数核心逻辑:

def good(num,sum):
    if num == 0:
        return sum  # 最深层递归确实返回了正确sum
    sum = sum + num
    num = num - 1
    good(num,sum)  # 这里漏掉了return!

问题就出在最后一行的递归调用上:

  • 当num不等于0时,你调用了good(num,sum),但没有用return把这个递归调用的结果传递回来
  • 递归最深层(num=0)算出的正确sum,没法“爬”回最外层的函数调用
  • 最外层的good(3,0)执行完所有步骤后,没有任何return语句,Python就默认返回None,这就是你打印k得到None的原因

2. 为啥改return print(sum)会看到“正确数值”?

这其实是个容易混淆的假象:

def good(num,sum):
    if num == 0:
        return print(sum)  # 这里是两个操作:print输出 + 返回None
    sum = sum + num
    num = num - 1
    good(num,sum)
  • print(sum)会在控制台输出正确的数值(比如3+2+1=6),但**print()函数本身的返回值是None**
  • 所以递归最深层返回的还是None,外层函数依然没传递返回值,最终k还是None
  • 你看到的“正确数值”只是print(sum)的控制台输出,并不是函数返回给k的值

3. 正确的修改方式

要让函数真的返回正确结果,只需要在递归调用时加上return,把深层的结果传递回来就行:

def good(num, sum_val):  # 建议别用sum当参数名,会覆盖Python内置的sum函数
    if num == 0:
        return sum_val
    sum_val = sum_val + num
    num = num - 1
    return good(num, sum_val)  # 加上return,把递归结果传回来

sum_val = 0
a = 3
k = good(a, sum_val)
print(k)  # 这下就能输出正确的6啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:17:00