-2

从 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")
4

3 回答 3

1

对于 JavaScript,使用charAt(),而不是像访问那样使用数组。

var next = soFar + rest.charAt(i);
于 2013-08-22T20:20:55.903 回答
1

您需要声明 i,使其范围为recPermute

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

如果没有var它将被创建为全局,因此每次调用recPermute都会为任何其他调用更改它。

于 2013-08-22T20:21:21.843 回答
0

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

for(var i = 0; ....
于 2013-08-22T20:21:49.393 回答