0

一些工作代码在底部。但是我在顶部的适应不佳的代码进入了无限递归循环。关于数组我不知道什么?

function recSubsets(soFar, rest)
{
    if (rest===[]) console.log(soFar);

    else
    {
        recSubsets(soFar.push(rest[0])), rest.slice(1));
        recSubsets(soFar, rest.slice(1));
    }
}  


function listSubsets(s)
{
    recSubsets([],s);
}

listSubsets([4,9,3,77])

下面是字符串的工作版本

function recSubsets(soFar, rest)
{
    if (rest==="") console.log(soFar);

    else
    {
        recSubsets(soFar+rest[0], rest.substring(1));
        recSubsets(soFar, rest.substring(1));
    }
}  


function listSubsets(s)
{
    recSubsets("",s);
}

listSubsets("cat")

给我:

cat ca ct c 在 t

4

1 回答 1

1

我发现了两个问题——

  1. push 不返回数组(返回数组的新长度)
  2. 你的停止条件不起作用。检查长度 === 0 代替工作。

    function recSubsets(soFar, rest)
    {
        if (rest.length===0) console.log(soFar);
    
        else
        {
            var newSoFar = soFar.slice();
            newSoFar.push(rest[0]);
            recSubsets(newSoFar, rest.slice(1));
            recSubsets(soFar, rest.slice(1));
        }
    }  
    
    
    function listSubsets(s)
    {
        recSubsets([],s);
    }
    
    listSubsets([4,9,3,77])
    
于 2013-08-28T20:07:15.803 回答