2016-08-07 9 views
0

で置換文字列の配列を返すことができない私のjsである: -再帰的解法:文字列置換。ここではjavascriptの

function recPerm(rest, soFar) { 
    var next; 
    var remaining; 
    var output=[]; 
    if (rest === '') { 
     console.log(soFar); //outputting strings..and this works 
     output.push(soFar); 
    } else { 

     for (var i = 0; i < rest.length; i++) { 
      remaining = rest.substr(0,i) + rest.substr(i+1,rest.length-1); 
      next = soFar + rest[i]; 
      recPerm(remaining, next); 
     } 

    } 
    return output; //returns an empty array in the end 
} 

var out=recPerm('abc',''); 
console.log(out); //prints empty array 

再帰的に、私は、入力文字列の順列を印刷しようとしています。入力文字列と空文字列を渡しています。この空文字列は、再帰的に残りの文字列とこの文字列の次の個々の文字を考慮して呼び出すことができます。ベースケースの内部では、個々の文字列をログすることができます。しかし、何とかそれは私の配列の最後に向かって保存していません。私のJSに欠けているものがありますか?

+0

あなたは 'output.push(someValueの)ような何かをしなければならない;' – Hitmands

+0

各呼び出し 'recPerm'は、あなたがして再帰呼び出しに無視している新しい配列を作成して返しているに。返された配列の内容を呼び出し元のスコープ内の配列に追加する必要があります。 –

+0

String.prototype.substr()は、第2パラメータとしてのサブ文字列の長さを指定します。私はあなたがそれに指数を渡すと間違っているかもしれないと思います。 – Redu

答えて

1

あなたの問題は、もちろん、それは私はあなたがパラメータとしてその変数を渡すことをお勧め...再作成されます、それはrecPerm機能とするときに、再帰的にrecPermを呼び出すにプライベートで、output変数に常駐:

あなたの関数内

function recPerm(rest, soFar, output) { 
 
    var next; 
 
    var remaining; 
 
    output = Array.isArray(output) ? output : []; 
 
    
 
    if(rest === '') { 
 
    output.push(soFar); 
 
    } else { 
 

 
    for (var i = 0; i < rest.length; i++) { 
 
     remaining = rest.substr(0,i) + rest.substr(i+1,rest.length-1); 
 
     next = soFar + rest[i]; 
 
     recPerm(remaining, next, output); 
 
    } 
 
    
 
    } 
 
    
 
    return output; //returns an empty array in the end 
 
} 
 

 
var out=recPerm('abc',''); 
 
console.log(out);

+0

すばらしい解決策。ありがとう –

+0

あなたの答えの説明を投稿してください。これらのコードのみの回答は低品質です。 –

関連する問題