Python递归函数为何返回None?递归计数问题咨询
递归函数返回None的原因及解决方法
你遇到的问题核心是递归分支未返回递归调用的结果,导致最外层函数调用默认返回None。
问题分析
看你的代码逻辑:
- 当
n > 0时,你执行count(n)进行递归,但这个分支没有任何return语句。 - 递归到最底层(
n <= 0)时,函数会返回j,但上层的递归调用没有把这个返回值传递回去。 - 举个例子:输入123时,递归流程是
count(123)→count(12)→count(1),count(1)返回3,但count(12)调用count(1)后没返回结果,所以count(12)返回None;同理count(123)也返回None,最终j拿到的就是None。
修正方案
在n > 0的分支里,添加return把递归调用的结果逐层传递回来:
i = 1 input_number = int(input("Input a digit you wish to count: ")) def count(n): global i n = int(n/10) if n > 0: i = i+1 return count(n) # 新增return,传递递归结果 else: j = i print(f"j={j}") return j j = count(input_number) print(f"i={i}") print(j)
更优写法(避免全局变量)
全局变量在递归中容易引发问题(比如多次调用函数时,i不会自动重置),推荐用递归本身的返回值计数,逻辑更清晰:
input_number = int(input("Input a digit you wish to count: ")) def count(n): if n < 10: return 1 return 1 + count(n // 10) result = count(input_number) print(result)
这个写法里,每个递归调用返回「当前位(1)加上剩余数字的位数」,最终直接得到总位数,无需依赖全局变量。
内容的提问来源于stack exchange,提问作者herohaha
相关产品推荐
相关产品推荐

