Python递归函数始终返回None:为何未返回预期值?
递归函数返回None的原因分析
你的递归函数之所以返回None,核心问题出在else分支缺少return语句:
原代码:
def countdown(n): if n == 0: return("Blastoff!") else: print(n) countdown(n-1) print(countdown(20))
问题拆解
- 当
n == 0时,函数确实会返回字符串"Blastoff!",但这个值只返回给了调用它的上一层递归。 - 当
n != 0时,函数执行完print(n)和递归调用countdown(n-1)后,没有任何显式的return语句。在Python中,函数如果没有指定返回值,默认会返回None。 - 最外层调用
countdown(20)最终会接收到最上层递归返回的None,所以print(countdown(20))会输出None。
修正方案
在else分支中,将递归调用的结果返回出去,让值逐层传递回最外层:
def countdown(n): if n == 0: return("Blastoff!") else: print(n) return countdown(n-1) # 新增return,传递递归调用的返回值 print(countdown(20))
这样修改后,每一层递归都会把下一层的返回值传递上来,最终countdown(20)会得到"Blastoff!",并被正确打印。
内容的提问来源于stack exchange,提问作者dargon salzbur
相关产品推荐
相关产品推荐

