2017-06-23 54 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

刚刚有代码的一个问题?解释你的问题先生! – Mritunjay

+0

每个位置可以有两个值'0'或'1'中的任何一个,所以在这里第一次我们将'nnth'位设置为'0'并对'n-1'位进行递归,然后我们使'nnth'位'1'和递归'n-1'位。这样它通过将每个位置值设置为0或1来生成所有可能的字符串。 –

回答

0

您传递的值是(n-1)。因此,当它打印第一组值时,函数中的n值为0,但当它从该递归中出来时,它是1,因为您将参数作为(n-1)0传递。因此,起作用它得到n的为1

0

该程序首先在(n-1)th索引设定元件以0,然后调用next level recursionprint此设定值不变并且这样做后的原始值,它再次设置(n-1)th索引元件1然后调用下一级递归来打印此设置的值。

这种逻辑发生在每个级别。

为了打印所有由01组成的字符串,该程序首先将第(n-1)个值设置为0(在基本情况下它的值将被打印为0),然后调用在第(n-1)个值上递归以打印此设定值。 因此nBits(n)(n-1)th值设置为0nBits(n-1)(n-2)th值设置为0和在基础案例所以on.So,0将无处不在打印。

在基础案例打印值0000...之后,在0th索引数组元素被设置为在nBits(1)1然后它只是印刷通过调用nBits(0)它打印1000...

相关问题