2017-06-23 2 views
0
public class GenerateAllStrings { 

    int []arrA; 

    public GenerateAllStrings(int n) 
    { 
     arrA = new int[n]; 
    } 

    public void nBits(int n) 
    { 
     if(n <= 0) 
      System.out.println(Arrays.toString(arrA)); 
     else 
     { 
      arrA[n-1] = 0; 
      nBits(n-1); 
      arrA[n-1] = 1; 
      nBits(n-1); 
     } 
    } 

    public static void main(String[] args) throws java.lang.Exception 
    { 
     int n = 3; 
     GenerateAllStrings i = new GenerateAllStrings(n); 
     i.nBits(n); 
    } 


} 

このプログラムでは再帰を理解できません。最初の値セットを印刷した後にnを1に設定する理由は何ですか(私はゼロにすべきだと思いました)?説明してください。すべてのnビットの文字列を生成すると考えると、A [0..n-1]はサイズnの配列です。

+0

だけコードを有する質問を印刷nBits(0)を呼び出すことにより、0thインデックスで配列エレメントは、nBits(1)1に設定され、それはちょうど印刷ですか?あなたの問題を説明してください! – Mritunjay

+0

位置のそれぞれは、2つの値「0」または「1」のいずれかを持つことができるので、ここでは最初にn番目のビットを0に設定し、n-1ビットの再帰を行い、ビット「1」および「n-1」ビットに対する再帰を含む。このようにして、各位置の値を0または1に設定することによって、すべての可能な文字列を生成します。 –

答えて

0

あなたが渡す値は(n-1)です。だから、最初の値のセットを出力するとき、関数のnの値は0ですが、その再帰から出てくるときに、(n-1)という引数を0に渡してから1になります。機能それはこのプログラムは最初0(n-1)thインデックスにある要素を設定し、その後next level recursionprintこのsetted値を呼び出して、これを実行した後、それが再び1(n-1)thインデックス要素を設定している1

0

たn個の元の値を取得します次のレベルの再帰を呼び出して、この設定された値を出力します。

このような種類のロジックが各レベルで発生しています。

すべての文字列を印刷するには01で構成されていますが、このプログラムでは最初にn-1番目の値を0に設定しています(ここでは基本値は0になります)。この設定された値を印刷するために(n-1)番目の値に対する再帰。 したがってnBits(n)nBits(n-1)0(n-2)th値を設定しているので、on.Soベース場合に、0はどこでも印刷される、0(n-1)th値を設定しています。

ベース場合に値0000...を印刷した後、1000...

関連する問題