python - 在 Python 中使用多个递归函数

标签 python recursion

我正在递归地计算数字的数字总和,直到总和小于 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/

相关文章:

python - 如何断言模拟是用特定类型而不是实例调用的?

python - 递归算法 - 使用 '+' 扩展与创建新列表

php - 找到分区集的每个可能组合的更好方法

python - PERL-like autovivification with default value in Python, and returns a default value from non-existing arbitrary nesting?

c - 数组整数的递归函数

python - 在 GAE 上的 NodeJS 中使用 Python 脚本

python - python模块的目录设置

python - 使用ajax在基于django类的 View 中找不到url

recursion - 如何在没有dolist的情况下在lisp中打印树,只有递归?

python - 斐波那契函数列表