如何在Python递归函数中将具有多个值的变量相加?

时间:2014-05-21 03:41:24

标签: python recursion

所以我在线学习递归函数。并且一个问题要求我编写一个函数来将数字加在一起。例如(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)

2 个答案:

答案 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的答案应该是为了简单明了而接受的。

另请注意:虽然我的解决方案处理负数并对各自的数字进行求和,但我们的评论中明确指出,至少有三种不同的方法来解释负数的总和号。