首页 > 解决方案 > 查找数字的数字根

问题描述

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

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)

标签: pythonalgorithm

解决方案


您没有在 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

推荐阅读