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

时间:2016-12-28 17:05:14

标签: 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)

我明白了:

  

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

2 个答案:

答案 0 :(得分:5)

将此转换为迭代(或dynamic programming?)版本是非常简单的:

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

答案 1 :(得分:0)

我无法重现这个问题。话虽如此,如果可能的话,采购迭代会更有效,正如 Wayne Werner 所示。

现在,如果你进行一点wikipedia次搜索,你会发现你甚至不需要迭代任何东西

def digital_root(n):
    if n<0:
        n = abs(n)
    if n%9==0 and n!=0:
        return 9
    return n%9