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
相关产品推荐
相关产品推荐

