Python递归函数为何输出末尾为None而非预期的10?
递归函数返回值问题解析
先看你的原代码:
def add_one(num): if num >= 9: return num + 1 total = num + 1 print(total) add_one(total) mynewtotal = add_one(0) print(mynewtotal)
输出结果:
1
2
3
4
5
6
7
8
9
None
问题原因
当递归执行到add_one(9)时,确实会进入if分支返回10,但这个返回值只会传递给调用它的上一层函数——也就是add_one(8)里的add_one(total)调用。而add_one(8)在执行完这个调用后,没有把拿到的10继续向上返回,Python中函数如果没有显式的return语句,执行完毕后会默认返回None。
以此类推,add_one(7)调用add_one(8)后也不会返回结果,同样返回None,直到最开始的add_one(0)最终返回None,这就是你看到末尾输出None的原因。
解决原理
给add_one(total)添加return,也就是改成return add_one(total),这样每一层递归函数都会把下层调用的返回值传递给上一层。最终最外层的add_one(0)就能拿到add_one(9)返回的10,打印mynewtotal时就会输出预期的10。
内容的提问来源于stack exchange,提问作者Reach
相关产品推荐
相关产品推荐

