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

为何我的Python数字根递归函数无法正常运行?

你的数字根递归函数问题分析与修复

嘿,我来帮你拆解下这个递归函数出问题的地方,一步步帮你搞定它!

问题1:多余且错误的循环破坏了原始数字

你已经通过digits = [int(d) for d in str(num)]把数字的每一位转换成整数存入数组了,但后面加的这个循环完全是画蛇添足,还直接把正确的数字覆盖了:

for n in digits:
    digits[x] = int(x)
    x = x + 1

比如输入15时,原本digits是[1,5],经过这个循环后会变成[0,1]——你把每一位数字替换成了它们的索引值,这直接导致后续计算完全错误。

问题2:累加各位数字的逻辑有误

你的第二个循环里,z的值一直是1没有递增,不管数组有多少元素,你都在重复加digits[1]:

for n in digits:
    digits[0] = digits[0] + digits[z]

比如输入123,原本应该计算1+2+3=6,但这个循环会把digits[0]变成1+2+2+2=7,完全不符合预期。

问题3:递归调用未返回结果

当你判断累加后的结果还是多位数时,调用了digital_root(digits[0]),但没有用return把递归的结果传递回来。这就导致递归完成后,函数没有把最终的数字根返回给上层调用,所以程序看似运行结束,却没有输出正确结果。


修复后的递归版本代码

保留你的递归思路,把错误的部分修正:

def digital_root(num): 
    # 检查num是否为多位数
    if num > 9:
        # 将num的各位数字转为整数数组(一步到位)
        digits = [int(d) for d in str(num)]
        # 计算各位数字的总和
        total = sum(digits)
        # 递归调用并返回结果
        return digital_root(total)
    else:
        return num

# 测试验证
print(digital_root(15))  # 输出6,符合预期
print(digital_root(942)) # 输出6(9+4+2=15,1+5=6)

额外福利:更高效的数学公式法

其实数字根有个数学规律:当数字不为0时,数字根等于num % 9;如果取模结果为0且数字不为0,则返回9。用这个公式可以不用递归,一行代码搞定:

def digital_root(num):
    return num % 9 if num % 9 != 0 or num == 0 else 9

内容的提问来源于stack exchange,提问作者Theodore.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:55