function choose(arr, size, total) {
var allResult = [];
(function (arr, size, result, tal) {
var arrLen = arr.length;
if (size < arrLen) {
for (var i = 0 ; i < arrLen; i++) {
var newResult = [].concat(result);
newResult.push(arr[i]);
if (size == 1) {
if (eval(newResult.join("+"))== tal) {
allResult.push(newResult);
}
} else {
var newArr = [].concat(arr);
newArr.splice(0, i + 1);
arguments.callee(newArr, size - 1, newResult, tal);
}
}
}
})(arr, size, [], total);
return allResult;
}
var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
console.log(choose(data, 3, 20))
论坛有人提问,于是查找资料,根据别人给的组合算法修改而来