The else
block should have a return inc(sum,vec)
.
Why? Take a look at this:
inc(0, [6, 7])
called
- in
else
-> calling inc(6, [7])
- in
else
-> calling inc(13, [])
- in
if vec == []
-> returning 13
to previous caller
- now
inc(13, []) == 13
and that's all, this value is not passed anywhere
inc(6, [7])
doesn't return anything
inc(0, [6, 7])
doesn't return anything
BTW, if vec == []
can be safely replaced with if not vec
and sum = sum + vec.pop(0)
- with sum += vec.pop(0)
for more clarity (although this line might me altogether omitted, see below).
All in all, the code could look like this:
def inc(sum, vec):
if not vec:
return sum
return inc(sum + vec.pop(0), vec)
What's more, you could've used a default value with the sum
argument:
def inc(vec, sum = 0): # << right here
if not vec:
return sum
return inc(vec, sum + vec.pop(0)) # change the argument position
With that the call to this function will be clearer:
inc(0, [6, 7]) # before
inc([6, 7]) # after
If you want a one-liner (might be a bit less readable, though):
def inc(vec, sum = 0):
# return sum if vec is empty or the _result_ of a recursive call otherwise
return sum if not vec else inc(vec, sum + vec.pop(0))