数字根是数字中所有数字的递归和。给定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时超出了最大递归深度 对象
答案 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