【发布时间】:2019-04-09 22:01:02
【问题描述】:
我有这段代码,它用递归计算数组元素的总和,但是当数组太大时,它会抛出 Maximum call stack size exceeded 错误。
var a = new Array(10 ** 7);
a.fill(0);
function sum(arr, i = 0) {
if(i === arr.length) {
return 0;
}
return arr[i] + sum(arr, i + 1);
}
sum(a);
所以我需要以某种方式对其进行更改以使其在所有情况下都能正常工作,并且我认为我可以使其与 Promises 异步工作,但它总是返回 Promise pending。
var a = new Array(10 ** 7);
a.fill(0);
var sum = (arr, i = 0) => new Promise((resolve) => {
setTimeout(() => {
if(i === arr.length) {
return resolve(0);
}
return sum(arr, i + 1).then(el => el + arr[i]);
}, 0);
});
sum(a);
我该如何解决?
任何帮助将不胜感激!
【问题讨论】:
-
你为什么需要递归,你不能只 reduce() 吗?
-
学根没坏处
-
当然可以,但这是一项任务,我必须修改代码并使其适用于大数组
-
不要为此任务使用递归(在 javascript 中)。您对此过于复杂:
const sum = arr => arr.reduce((a, b) => a + b, 0)
标签: javascript recursion promise