Simple recursive sum function | what's the cause of the weird behaviour?

Rotwang sg552 at hotmail.co.uk
Sat Jul 6 16:10:48 EDT 2013


On 06/07/2013 19:43, Joshua Landau wrote:
> On 6 July 2013 13:59, Russel Walker <russ.pobox at gmail.com> wrote:
>> Since I've already wasted a thread I might as well...
>>
>> Does this serve as an acceptable solution?
>>
>> def supersum(sequence, start=0):
>>      result = type(start)()
>>      for item in sequence:
>>          try:
>>              result += supersum(item, start)
>>          except:
>>              result += item
>>      return result
>
> It's probably more robust to do:
>
> def supersum(sequence, start=0):
>      for item in sequence:
>          try:
>              result = result + supersum(item, start)
>         except:
>              result = result + item
>      return result

I assume you meant to put "result = start" in there at the beginning.


> as that way you aren't assuming the signature of type(start).

It's not quite clear to me what the OP's intentions are in the general 
case, but calling supersum(item, start) seems odd - for example, is the 
following desirable?

 >>> supersum([[1], [2], [3]], 4)
22

I would have thought that the "correct" answer would be 10. How about 
the following?

def supersum(sequence, start = 0):
     result = start
     for item in reversed(sequence):
         try:
             result = supersum(item, result)
         except:
             result = item + result
     return result



More information about the Python-list mailing list