无法从递归排列函数返回正确的值

时间:2016-07-17 23:05:04

标签: javascript algorithm recursion permutation

我正在尝试修改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

0 个答案:

没有答案