数字和,Python

Reg*_*ald 4 python python-3.x

我需要编写一个计算数字位数之和的代码,这些是问题的确切文本:数字n的数字和是其数字的总和.写一个递归函数digitalSum(n),它取一个正整数n并返回它的数字和.例如,digitalSum(2019)应该返回12,因为2 + 0 + 1 + 9 = 12.这些是我写的代码:

def digitalSum(n):
   L=[] 
   if n < 10:
      return n
   else:
      S=str(n)
      for i in S:
         L.append(int(i))
      return sum(L)
Run Code Online (Sandbox Code Playgroud)

这些代码工作正常,但它不是递归函数,我不允许将任何int更改为str.你能救我吗?

Gra*_*mpa 9

试试这个:

def digitalSum(n):
    if n < 10 :
        return n
    return n % 10 + digitalSum( n // 10 )
Run Code Online (Sandbox Code Playgroud)

编辑:这个算法背后的逻辑是,对于递归函数的每次调用,我们砍掉数字的最后一位数并将其加到总和中.首先我们获取最后一个数字,n % 10然后我们再次调用该函数,传递最后一个数字被截断的数字:n // 10.我们只有在达到一位数时才会停止.在我们停止之后,随着递归调用的返回,数字的总和以相反的顺序计算.

数字12345的示例:

5 + digitalSum( 1234 )
5 + 4 + digitalSum( 123 )
5 + 4 + 3 + digitalSum( 12 )
5 + 4 + 3 + 2 + 1 <- done recursing
5 + 4 + 3 + 3
5 + 4 + 6
5 + 10
15
Run Code Online (Sandbox Code Playgroud)

  • 发布没有解释的代码片段不是回答作业问题的最佳方式.考虑阅读http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions (2认同)