所以我在线学习递归函数。并且一个问题要求我编写一个函数来将数字加在一起。例如(1023) - > 1 + 0 + 2 + 3 = 6.我使用%和//每次都去掉一个数字。但是,我不知道如何将它们加在一起。我能得到的最接近的是打印出每个数字。任何人都可以帮我解决或者给我一个提示吗?
def digitalSum(n):
if n < 10:
sum_total = n
print(sum_total)
else:
sum_total = n % 10
digitalSum((n - (n % 10))//10)
print(sum_total)
digitalSum(1213)
答案 0 :(得分:5)
您的函数应返回当前数字加上其余数字的总和:
def digitalSum(n):
if n < 10: return n
return n % 10 + digitalSum(n // 10)
print digitalSum(1213)
为完整起见,您还可以处理负数:
def digitalSum(n):
if n < 0: sign = -1
else: sign = 1
n = abs(n)
if n < 10: return n
return sign * (n % 10 + digitalSum(n // 10))
print digitalSum(1213)
答案 1 :(得分:0)
您的功能的正确版本如下:
from math import log10
def sum_digits(n, i=None):
if i is None:
i = int(log10(abs(n)))
e = float(10**i)
a, b = (n / e), (abs(n) % e)
if i == 0:
return int(a)
else:
return int(a) + sum_digits(b, (i - 1))
print sum_digits(1234)
print sum_digits(-1234)
示例:强>
$ python -i foo.py
10
8
>>>
已更新:已正确更新( IHMO )以应对否定数字。例如:-1234
== -1 + 2 + 3 + 4 == 8
NB:虽然这个答案已被接受(谢谢)但我认为perreal的答案应该是为了简单明了而接受的。
另请注意:虽然我的解决方案处理负数并对各自的数字进行求和,但我们的评论中明确指出,至少有三种不同的方法来解释负数的总和号。