You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:36:15