我正在尝试修改Heap算法的this blogger's version。
我的问题是这个函数打印出每个排列都很好,但是如果我尝试将这些排列添加到我在函数运行后打印出来的数组中,我会得到数组中每个元素的相同值。 / p>
以下是JSFiddle,我已在下面粘贴了我的代码。有谁知道我为什么会这样做?
// Purpose is to create every permutation from the elements in the array
// We can do this by using Heap's algorithm
var start = ["1", "2", "3", "4"];
var arr2 = []; // I ADDED THIS LINE
generate(start.length, start);
// Generate the permutation for a given n (amount of elements) and a given array
function generate(n, arr) {
// If only 1 element, just output the array
if (n == 1) {
console.log(arr);
arr2.push(arr); // I ADDED THIS LINE
return;
}
for (var i = 0; i < n; i+= 1) {
generate(n - 1, arr);
// If n is even
if (n % 2 == 0) {
swap(arr, i, n - 1);
} else {
swap(arr, 0, n - 1);
}
}
}
function swap(arr, idxA, idxB) {
var tmp = arr[idxA];
arr[idxA] = arr[idxB];
arr[idxB] = tmp;
}
console.log(arr2); // I ADDED THIS LINE