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(我认为它应该为零)?请解释一下。
答案 0 :(得分:0)
您传递的值是(n-1)。因此,当它打印第一组值时,函数中n的值为0,但是当它从该递归中出来时,它是1,因为您将参数传递为(n-1),即0。因此出现了函数它获得n的原始值,即1。
答案 1 :(得分:0)
此程序首先将(n-1)th
索引设置为0
,然后将next level recursion
调用print
此设置值,并在执行此操作后再次设置{{索引元素到(n-1)th
然后调用下一级递归来打印这个设置值。
这种逻辑发生在每个层面。
为了打印所有字符串由1
和0
组成,这个程序只是首先将第(n-1)个值设置为0(这里在基本情况下它的值将是打印0)然后调用第(n-1)个值的递归以打印此设置值。
因此,1
将nBits(n)
值设置为(n-1)th
,0
将nBits(n-1)
值设置为(n-2)th
,依此类推。所以在基本情况下,0
将随处可见。
在基本案例中打印值0
后,0000...
索引处的数组元素设置为0th
中的1
,然后通过调用{{1}打印它打印nBits(1)