Javascript递归无法按预期运行

时间:2015-07-14 08:44:56

标签: javascript recursion permutation

我将此方法从Java移植到Javascript。使用"原创"在其中包含9个对象的数组中,Java代码创建了大小为4的3000个子数组。

在这个javascript代码中,我得到6个大小为9的子数组。

var hitterArray = new Array();

function permute(level, permuted, used, original){

    if (level == 4) {
        hitterArray.push(permuted); //array of arrays
    } else {
        for (i = 0; i < original.length; i++) {
            if (!used[i]) {
                used[i] = true;

                permuted.push(original[i]);

                permute(level + 1, permuted, used, original);

                used[i] = false;
            }
        }
    }
}

我想要3000个大小为4的子阵列,为什么这不起作用?

这是我初始化置换函数的方法:

            var used = new Array(results.length);
            for(p = 0; p < used.length; p++){
                used[p] = false;
            }
            var permuteArray = new Array();

            permute(0, permuteArray, used, results);

洞察力赞赏

1 个答案:

答案 0 :(得分:1)

我认为错误发生在for循环中,您需要使用i声明var,否则您将其设为全局变量。

for(var i = 0; ....

可能产生影响的另一件事是你总是传递对数组的引用:usedpermuted可能会对结果产生一些影响,考虑用{{1克隆数组创建它们的新副本。

而且我认为9个中4个对象的排列应该是3024(9 * 8 * 7 * 6),所以你应该得到3024个4个数组

修改

array.slice()