我不明白为什么这个递归循环没有停止

2024-03-28 09:41:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在递归方面我是个新手(python,哈哈),所以我想尝试一下代码战争问题(https://www.codewars.com/kata/541c8630095125aba6000c00/train/python

我非常困惑为什么中断会被忽略,而递归会继续

def digital_root(n):
    x = list(str(n))
    z = 0
    while True:
        for i in range(0, len(x)):
            x[i] = int(x[i])
        for i in x:
            z = i + z
        if z < 10:
             break
        elif z >= 10:
            digital_root(z)
    return z

print(digital_root(942))

Tags: 代码inhttpscomfordefwwwtrain
1条回答
网友
1楼 · 发布于 2024-03-28 09:41:23

递归调用自身后,它将丢弃返回值,因此zx保持不变。将递归调用更改为:

return digital_root(z)

这样递归就结束了。事实上,while循环不应执行多次,因此您可以只执行以下操作:

def digital_root(n):
    x = list(str(n))
    z = 0
    for i in range(0, len(x)):
        x[i] = int(x[i])
    for i in x:
        z = i + z
    if z < 10:
        return z
    return digital_root(z)

或者,如果您希望完全消除递归,您真正需要的是以下内容(包括一些额外的简化):

def digital_root(n):
    while n >= 10:
        n = sum(int(d) for d in str(n))
    return n

相关问题 更多 >