当前位置: 首页 > 知识库问答 >
问题:

在Python中使用多个递归函数

景宏朗
2023-03-14

我在递归地计算一个数的位数和,直到和小于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)

但是,如果我们有类似n=27640的情况,正确的输出是1,因为27640->19->10->1。但是我的代码停止在第二个级别,并以10的形式给出答案。我可以得到一些帮助来修改我的第二个代码以解决这个问题吗?提前谢了。

共有1个答案

吴高洁
2023-03-14

问题是,您只计算最多两个级别。在任何时候,你都没有编码逻辑,说“这样做,直到我们得到一个小于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
 类似资料:
  • 问题内容: 我很难理解修饰的递归函数是如何工作的。对于以下代码段: 输出为: 第一个打印f(n),因此很自然,每次递归调用f(n)时,它都会打印“原始”。 第二个打印def_f(n),因此当n传递给包装器时,它将递归调用f(n)。但是包装器本身不是递归的,因此仅打印一个“装饰”。 第三个让我感到困惑,这与使用装饰器@dec相同。为什么修饰的f(n)也调用包装器五次?在我看来,def_f = dec

  • 考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我

  • 我试图在Python中做一个函数,它接受树的任意节点,并根据节点给出的列表填充列表。 考虑到以下绘制糟糕的树: 例如,如果我们从节点5开始,我们应该得到: 包含具有相同父节点的所有节点的列表,包括我们从(4和5)开始的节点。 任何子节点,但不是其子节点(6) 父节点和具有相同父节点的任何父节点,以及它们的父节点,等等,直到我们到达根节点,但不包括根节点(在本例中只有2和3个,但如果树更深,我们开始

  • 本文向大家介绍如何在Python中编写递归函数?,包括了如何在Python中编写递归函数?的使用技巧和注意事项,需要的朋友参考一下 一个递归 函数是它的执行过程中调用自身的函数。这使函数可以重复多次,输出结果和每次迭代的结束。递归与无限有关。  下面是一个递归函数示例,用于查找整数的阶乘。 数字的阶乘 是从1到该数字的所有整数的乘积。  例如,阶乘9(表示为9!)为1 * 2 * 3 * 4 *

  • 我试图了解如何将各种递归函数转换为尾递归。我已经查看了许多将斐波那契和阶乘转换为尾递归的示例,并理解了这些示例,但很难跳到具有某种不同结构的问题。一个例子是: 如何将其转换为尾部递归实现? 我已经看过类似的问题,例如:将正常递归转换为尾部递归,但这些似乎并没有转化为这个问题。

  • 我需要在树结构中递归调用函数。 下图是树结构的示例。 在此输入图像描述 在这里,我通过传递在for循环中调用python函数,这将在第一个循环中生成,在第二个循环中生成。 这里我需要为和运行相同的函数,所以这里将生成和,将生成,然后为运行相同的python函数,它将生成等等,我必须运行相同的函数,直到我得到null。 如何用python编写逻辑