Python:获取对象的str时超出了最大递归深度,如何解决?

0 python

数字根是数字中所有数字的递归和.给定n,取n的数字之和.如果该值有两位数,则以这种方式继续减少,直到产生一位数字.当我这样称呼时:

def digital_root(n):
    if(0<n<10):
        return n
    else:
        list = [int(x) for x in str(n)]
        return digital_root(sum(list))

digital_root(942)
Run Code Online (Sandbox Code Playgroud)

我明白了:

RuntimeError:获取对象的str时超出了最大递归深度

Way*_*ner 5

将它转换为迭代(或者是动态编程?)版本是非常简单的:

def digital_root(n):
    str_n = str(n)
    while len(str_n) > 1:
        n = sum(int(x) for x in str_n)
        str_n = str(n)
    return n
Run Code Online (Sandbox Code Playgroud)