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

私に与えます:

猫 ca ct c at a t

4

1 に答える 1

1

私は2つの問題を見つけました -

  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 に答える