Python递归求数字根函数返回None而非整数的错误排查
数字根计算代码Bug定位与修复
问题现象
代码预期功能是循环读取用户输入整数,输入-1时退出;对每个输入整数反复计算各位数字之和,直到得到1位数字根后返回。但实际运行时,输入需要递归计算的数值(比如29)时,函数返回None,无法得到预期结果。
错误位置
核心错误在g()函数的递归分支,对应原代码第11行的g(s)语句,缺少返回值声明。
错误原因
Python函数的默认返回值为None,只有显式通过return关键字指定返回内容时,才会将对应值返回给调用方。
以输入29为例,原代码执行流程如下:
- 第一次调用
g(29),计算各位和得到s=11,11是两位数不满足返回条件,进入else分支 - else分支仅调用了
g(11),但没有接收或返回这个调用的结果:内层g(11)确实计算得到结果2并返回,但这个2只停留在内层调用栈,没有被外层的g(29)返回 - 外层
g(29)执行完else分支的语句后,没有可返回的内容,直接输出默认值None
另外原主循环逻辑存在小缺陷:当用户输入-1时,程序会先执行一次g(-1)的计算和打印,再退出循环,不符合预期。
修复后代码
def g(n): s = 0 while n >= 1: s = s + n % 10 n = n // 10 if s // 10 == 0: return s else: # 增加return,将内层递归的返回值透传到最外层调用 return g(s) while True: n = int(input()) if n == -1: break print(g(n))
验证效果
输入29时,执行流程为g(29)返回g(11)的结果,g(11)返回2,最终正确打印2;输入-1时直接退出循环,不会产生多余输出。
内容的提问来源于stack exchange,提问作者maskur
相关产品推荐
相关产品推荐

