我正在递归地计算数字的数字总和,直到总和小于 10。例如;
99999->45->9
由于最后的数字和是9,所以我们停止。据我所知,我知道以下递归方法运行良好;
第一种方法
def sumdigits(n):
if n//10==0:
return n
q,r=divmod(n,10)
return sumdigits(q+r)
但我正在尝试使用两个递归函数来编写它,以便学习不同的方法。这是我的第二种方法;
第二种方法
def digitalRoot(n):
def sumdigits(n):
if n==0:
return 0
q,r=divmod(n,10)
return r+sumdigits(q)
s=sumdigits(n)
if s//10==0:
return s
q,r=divmod(s,10)
return r+sumdigits(q)
如上所示,我正在尝试编写一个单独的检查数字总和是否小于 10。它适用于计算级别最多为 2 的情况。
例如,n=99999
给出的总和为 99999->45->9
。
但是如果我们有像 n=27640
这样的情况,她的正确输出是 1,因为 27640->19->10->1。
但我的代码是在第二级停止并给出 10.
的答案。我可以得到一些帮助来修改我的第二个代码以解决问题吗?提前致谢。
最佳答案
问题是您最多只能计算两个级别。您从来没有对这样的逻辑进行编码:“一直这样做,直到我们得到小于 10 的答案。”所以...让我们开始吧。
def sum_digits(n):
t = 0
while n:
n, r = divmod(n, 10)
t += r
return t
def digital_root(n):
while n >= 10:
n = sum_digits(n)
return n
关于python - 在 Python 中使用多个递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64382983/