I've tried this but it doesn't work.
def sumDigits(n):
if n == 0:
print 0
else:
print n%10 + sumDigits(n/10)
sumDigits(35)
I've tried this but it doesn't work.
def sumDigits(n):
if n == 0:
print 0
else:
print n%10 + sumDigits(n/10)
sumDigits(35)
If you are using Python 3.x, note that you need to use //
to perform integer division, as /
will perform float
(true) division even with two integers.
In any case, the function needs to return
the values, not just print
them.
def sumDigits(n):
if n == 0:
return 0
else:
return n%10 + sumDigits(n//10)
Then it will work as intended
>>> sumDigits(35)
8
Here is a solution that works for numbers (and strings!) of all lengths.
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
This, when written out, will look like this:
sumDigits(359) = 3 + sumDigits(59) = 3 + 5 + sumDigits(9) = 3 + 5 + 9 + 0
You need to return values instead of printing values.
Try this:
def sumDigits(n):
if n == 0:
return 0
else:
return n%10 + sumDigits(n//10)
>>> sumDigits(41)
5
>>> sumDigits(31)
4
You can also use and
operator to leverage the equality check when n is 0.
def sumDigits(n):
return n and n%10 + sumDigits(n//10)
Here, n%10 + sumDigits(n//10)
will be evaluated only when n
is non-zero.
Use //
as it gives the quotient on division in which the digits after the decimal point are removed.
When you attempt to make the recursive call sumDigits( n / 10)
it expects to have a value returned. When it fails to get that value because the function doesn't return anything, you receive the error.
This could prove useful: Python Functions