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倍程度速くなっただけでした。