生成n位的所有字符串,考虑A [0..n-1]是大小为n的数组

时间:2017-06-23 04:41:54

标签: java recursion

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(我认为它应该为零)?请解释一下。

2 个答案:

答案 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然后调用下一级递归来打印这个设置值。

这种逻辑发生在每个层面。

为了打印所有字符串由10组成,这个程序只是首先将第(n-1)个值设置为0(这里在基本情况下它的值将是打印0)然后调用第(n-1)个值的递归以打印此设置值。 因此,1nBits(n)值设置为(n-1)th0nBits(n-1)值设置为(n-2)th,依此类推。所以在基本情况下,0将随处可见。

在基本案例中打印值0后,0000...索引处的数组元素设置为0th中的1,然后通过调用{{1}打印它打印nBits(1)