我需要编写一个计算数字位数之和的代码,这些是问题的确切文本:数字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.你能救我吗?
试试这个:
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)
| 归档时间: |
|
| 查看次数: |
8548 次 |
| 最近记录: |