如何优化这个递归算法?
原帖 集合的划分,
我需要把所有的可能都列出来。。
我根据上面的算法写的代码,但会让浏览器内存爆了,请问如何优化这个递归算法?
大神可以忽略我的代码,直接写自己的代码,解决我的需求。。多谢。
calc(3,2) //三个球放入2个盒子中
/* [
[ [1],[2,3] ],
[ [2],[1,3] ],
[ [3],[1,2] ]
] */
function calc(n, k) {
if ((n < k) || (k == 0)) {
return { num: 0 };
} else if (k == 1) {
var arr = [];
for (var i = 0; i < n; i++) {
arr.push(i + 1)
};
return {
num: 1,
cont: [
[arr]
] // [ [[ 1 ]] ]
};
} else if (k == n) {
var arr = [];
for (var j = 0; j < k; j++) {
arr.push([j + 1])
}
return {
num: 1,
cont: [arr] // [ [[1],[2],[3]] ]
};
} else {
var onePart = calc(n - 1, k - 1)
var arr = onePart.cont.map(function(item) {
var Item = JSON.parse(JSON.stringify(item));
Item.push([n])
return Item;
})
var twoPart = calc(n - 1, k); //调用下一层递归
var brr = []
twoPart.cont.forEach(function(item) {
item.forEach(function(ch, index) {
var Item = JSON.parse(JSON.stringify(item));
Item[index].push(n);
brr.push(Item)
})
})
var total = onePart.num + k * twoPart.num
return {
num: total,
cont: arr.concat(brr)
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感觉这个就可以一定程度的优化。
Js通过记忆优化递归