2017-06-23 68 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...

相關問題