Project Euler 149(2)

http://projecteuler.net/index.php?section=problems&id=149


よく考えたら、これって左から順に考えたほうが簡単ですね。そうすると、全体の和、最大の和、右端を含む最大の和の3つを考えれば済みます。こうするとコードがすっきりした上、46秒でした。再帰使わないから速いんでしょうか。

def max_sum(a):
    def add(s, e):
        return (s[0] + e, max(s[1], s[2] + e), max(s[2] + e, e))
    
    return reduce(add, a, (0, 0, 0))

ちなみに、C++で組んだら2倍程度速くなっただけでした。