在给定非负整数N的情况下编写递归Python函数,以计算并返回其数字之和

时间:2015-07-10 14:41:29

标签: python

我试过这个,但它不起作用。

def sumDigits(n):
    if n == 0:
        print 0
    else:
        print n%10 + sumDigits(n/10)
sumDigits(35)

4 个答案:

答案 0 :(得分:2)

如果您使用的是Python 3.x,请注意您需要使用/执行整数除法,因为float将执行return(true)除法,即使有两个整数。

在任何情况下,该函数都需要print个值,而不仅仅是def sumDigits(n): if n == 0: return 0 else: return n%10 + sumDigits(n//10)

>>> sumDigits(35)
8

然后它将按预期工作

{{1}}

答案 1 :(得分:1)

这是一个适用于所有长度的数字(和字符串!)的解决方案。

def sumDigits(n):
    n = str(n)

    if n is "":
        # Base Case: Return 0 when there is nothing left
        return 0    
    else:
        # Default Case: Return the first number + sum of the rest)
        return int(n[0]) + sumDigits(n[1:])    


>>> print sumDigits(359)
>>> 17

当写出来时,它将如下所示:

sumDigits(359)= 3 + sumDigits(59)= 3 + 5 + sumDigits(9)= 3 + 5 + 9 + 0

答案 2 :(得分:0)

您需要返回值而不是打印值。

试试这个:

def sumDigits(n):
    if n == 0:
        return 0
    else:
        return n%10 + sumDigits(n//10)

>>> sumDigits(41)
5

>>> sumDigits(31)
4

当n为0时,您还可以使用and运算符来利用相等性检查。

def sumDigits(n):
    return n and n%10 + sumDigits(n//10)

此处,n%10 + sumDigits(n//10)仅在n非零时才会被评估。

使用//,因为它给出了除法小数点后面的数字的除数。

答案 3 :(得分:0)

当您尝试进行递归调用sumDigits( n / 10)时,它希望返回一个值。如果由于函数没有返回任何内容而无法获得该值,则会收到错误。

这可能很有用:Python Functions