我的第一个排列课 - 这段代码缺失了什么?

时间:2013-08-22 20:15:25

标签: javascript

从C ++书中翻译(显然是错误的)。 如果我能让它发挥作用,那么我就可以开始尝试去理解它了。

function recPermute(soFar, rest)
{
    if (rest==="")
    {
        console.log(soFar);    
    }
    else
    {
        for(i=0; i<rest.length; i++) // <<< error was in not declaring the "i"
        {
            var next = soFar + rest[i];
            var remaining = rest.substr(0,i) + rest.substr(i+1);
            recPermute(next, remaining);
        }
    }
}   


function listPerm(s)
{
    recPermute("",s);
}

listPerm("kitcap")

3 个答案:

答案 0 :(得分:1)

对于JavaScript,请使用charAt(),而不是使用类似访问的数组。

var next = soFar + rest.charAt(i);

答案 1 :(得分:1)

您需要declare i所以它的范围是recPermute

for(var i=0; i<rest.length; i++)

如果没有varit'll be created as a global,那么对recPermute的每次调用都会改变其他任何来电。

答案 2 :(得分:0)

可能存在问题的一件事是,您对该函数的每次调用都使用相同的i。您需要声明一个本地i,否则它将在全局范围内声明。

for(var i = 0; ....