let num=[8, 7, 1, 3, 6]
for (let i = 1; i < num.length; i++) {
console.log(numAdd(num, i));
}
function numAdd(arr, count) {
let res = [] // 所有排列结果
let arrange = (tempArr, leftArr) => {
if (tempArr.length === count) { // 这里就是递归结束的地方
res.push(tempArr)
} else {
leftArr.forEach((item, index) => {
let temp = [].concat(leftArr)
temp.splice(index, 1)
// 此时,第一个参数是当前分离出的元素所在数组;
// 第二个参数temp是传入的leftArr去掉第一个后的结果
arrange(tempArr.concat(item), temp) // 这里使用了递归
})
}
}
arrange([], arr)
return res
}
先从输入数组中切割出每一个数字,再将剩余数组当作参数递归回去,再次循环就再切割插入入一个数字
运行结果: