Python count函数迭代调用传值≤10时无返回值问题
问题原因
你的递归函数在num <= 10的分支中,仅调用了内层的count(new),但没有将内层调用的返回值向外传递。Python中函数如果没有显式声明return语句,默认返回值为None,这就是你调用count(8)拿不到预期结果的核心原因。
传入22时会直接命中第一个num > 10的判断分支,直接执行return逻辑,所以能正常拿到返回值22;但传入8时,函数会逐层递归调用count(9)、count(10)、count(11),最内层的count(11)确实计算出了结果11,但外层的count(10)、count(9)、count(8)都没有接收这个返回值再向外返回,最终赋值给nummer的就只有默认的None。
修复方法
在递归调用count(new)前补充return关键字,把内层递归的返回值逐层透传到最外层即可,修复后的代码:
def count(num): if num > 10: return num if num <= 10: new = num + 1 return count(new) nummer = count(8)
修复后执行count(8)就能得到预期的返回值11,执行链路为:
- count(8)返回count(9)的执行结果
- count(9)返回count(10)的执行结果
- count(10)返回count(11)的执行结果
- count(11)命中
num>10分支返回11,结果逐层向外传递,最终得到正确值
小提示:两个if的判断条件是完全互斥的,第二个判断可以直接替换为else,代码逻辑会更简洁。
内容的提问来源于stack exchange,提问作者Aurora Borealis
相关产品推荐
相关产品推荐

