0

我正在尝试修改这个博主的堆算法版本。

我的问题是这个函数可以很好地打印出每个排列,但是如果我尝试将这些排列添加到我在函数运行后打印出来的数组中,我会为数组中的每个元素得到相同的值。

这是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
4

0 回答 0