2017-02-23 15 views
0

私はこのコードの問題を抱えています。私はすべての順列を印刷したいが、間違った出力を得る。間違った順列出力

function Swap (array,index1,index2) 
{ 
    var temp = array[index1]; 
    array[index1] = array[index2]; 
    array[index2] = temp; 
} 
function Permutation(ArrayNum , StartIndex) 
{  
    if(StartIndex == ArrayNum.length-1) 
    { 
     console.log(ArrayNum);   
    } 
    else 
    { 
     for(i = StartIndex; i< ArrayNum.length; i++) 
     { 
      Swap(ArrayNum,StartIndex,i); 
      Permutation(ArrayNum,StartIndex + 1); 
      Swap(ArrayNum,StartIndex,i); 
     }    
    }    
} 

たとえば、3つの数字の場合、この出力が得られますが、これは置換の完全なリストではありません。

[1, 2, 3] 
[1, 3, 2] 

どうすればこの問題を解決できますか?

+0

あなたはアルゴリズムを取得したのですか?紙の上で試してみてください。 – paiv

+0

このアルゴリズムはネット上のどこにでもあり、バックトラッキングアルゴリズムであり、正しいと思いますが、出力は –

+0

ではありません。アルゴリズムが正しい場合は、関数をどのように呼び出すか、結果をどのように出力するかが問題になりますしかし、どちらも表示されません。 –

答えて

0

i変数はグローバルで、ローカル変数にする必要があります。あなたがエラーなしで"use strict";

 for(i = StartIndex; i< ArrayNum.length; i++) 
      ^

ReferenceError: i is not defined 

でstrictモードを設定した場合、それが唯一のループを通って行くと、エラーを見ることができます。

+0

返事ありがとうございますが、私はループの中で変数iを宣言し、ローカルであると思います.....とにかくこの問題を修正するコードを編集しています –

+1

varを追加することで非常に多くのpaivをありがとうコードは正常に動作しましたが、私はなぜ私のコードのすべてで変数を持っていないため、この問題が発生したのか理解できません。 大変ありがとうございます 私は新人デベロッパーです。ご協力いただきありがとうございます。 –