【问题标题】:Finding the digital root of a number [duplicate]查找数字的数字根[重复]
【发布时间】:2021-01-28 05:46:55
【问题描述】:

我试图实现一个函数来找到一个数字的数字根(它是一个数字中所有数字的递归和。)但是由于某种原因,如果函数对自身进行递归调用,它不会返回任何内容

import functools
def digital_root(n):
  r=functools.reduce(lambda x,y:int(x)+int(y),list(str(n)));
  if r//10<1:
   return r
  else:
   digital_root(r)

【问题讨论】:

  • reduce函数需要的

标签: python algorithm


【解决方案1】:

你没有在 else 子句中返回任何值,因此它给出了 None

def digital_root(n):
  r=functools.reduce(lambda x,y:int(x)+int(y),list(str(n)));
  if r//10<1:
   return r
  else:
   return digital_root(r)

更易读的形式是:

def root(n):
    d_sum = 0
    for i in str(n):
        d_sum += int(i)
    if dsum<10:
        return d_sum
    return root(d_sum)

没有递归:

def root(n):
    while n > 9:
        n = sum(map(int, str(n)))
    return n

【讨论】:

    【解决方案2】:

    除了缺少return之外,你没有查找简化的封闭式算法:

    return 9 if (r % 9 == 0) else (r % 9)
    # Parentheses are unneeded, but added for readability
    

    数字和的“老派”名称是“投出九”;你取数字的模基b-1,其中b 是原始数字基数。 9 表示十进制,15 表示十六进制等。

    【讨论】:

    • 很好的解决方案,基于数学。虽然不适合编程作业
    • 这取决于分配规范。递归仅作为“数字根”的定义给出,而不是实现要求。
    • 我给了你一个 +1 来提及它,但这并不完美(例如尝试 189)。第 4000 个答案快乐!
    • 所有 9 的倍数都会使这种方法失败。对此案例的答案添加了编辑
    【解决方案3】:

    我不确切知道您要达到什么目标,但我猜您想返回递归调用的结果,因此将示例的最后一行更改为:

       return digital_root(r)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2015-05-10
      • 1970-01-01
      • 2021-12-03
      • 2020-09-08
      • 2016-01-17
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多