cnb wrote:
this recursive definition of sum thrumped me, is this some sort of
gotcha or am I just braindead today?
and yes i know this is easy a a for x in xs acc += x or just using the
builtin.

def suma(xs, acc=0):
        if len(xs) == 0:
                acc
        else:
                suma(xs[1:], acc+xs[0])

it returns none.

Without return statement, the only recursive solution is a lambda expr :

>>> suma = lambda xs : xs[0]+suma(xs[1:]) if xs else 0

>>> suma(range(101))
5050

Note that suma(xs[1:]) implies copying the remainder of xs, what in turn makes the time grow quadratically with the length of xs. So instead of passing a superfluous acc second variable, you could pass an index into the list, eg

def suma(xs,pos=0) :
    if pos>=len(xs) :
       return 0
    else :
       return xs[pos]+suma(xs,pos+1)

Cheers, BB

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to