递归函数输出None问题咨询:为何未返回预期列表?
递归函数返回None的问题解决
你的问题出在递归分支没有返回递归调用的结果。当else分支执行func(x)时,你没有把这个递归调用的返回值传递回去,导致最外层的函数调用没有拿到最终的结果,默认返回None。
原代码问题分析
list = [] def func(x): x.append(1) if len(x) >10: return x else: func(x) # 这里仅调用递归,但未返回结果 print(func(list))
当递归执行到len(x)>10时,确实会返回目标列表,但这个返回值只会传递给上一层的func(x)调用,而上一层的else分支没有把该值返回出去,逐层往上传递后,最外层函数调用最终没有得到有效返回值,因此输出None。
修正后的代码
只需在else分支里添加return,将递归调用的结果返回即可:
my_list = [] # 建议不要用list作为变量名,避免覆盖Python内置类型 def func(x): x.append(1) if len(x) > 10: return x else: return func(x) # 返回递归调用的结果 print(func(my_list))
执行这段代码会输出预期的[1,1,1,1,1,1,1,1,1,1,1]。
额外提示:尽量避免使用list这类内置类型名称作为变量名,否则会覆盖原有的内置功能,引发潜在问题。
内容的提问来源于stack exchange,提问作者Daniel_GBR
相关产品推荐
相关产品推荐

