Пожалуй, тут без рекурсии можно, тогда не понадобится расходовать память на мемоизацию. Всё просто, в общем. Вот вариант, где по сути делается то же самое.
function maxSum(a) {
if (!a || !a.length) {
return 0;
}
var x = 0, y = a[0];
for (var i = 1; i < a.length; ++i) {
var t = y;
y = Math.max(x + a[i], y);
x = t;
}
return y;
}
alert(maxSum([3, 20, 8]));
alert(maxSum([4, 10, 3, 1, 5]));