2015-08-09 106 views
1

對於Java練習,我開始研究一種方法countBinary,該方法接受一個整數n作爲參數,打印所有具有n數字的二進制數字,將每個值打印在單獨的行上。假設n爲非負數且大於0,則某些示例輸出看起來像thisJava - 複雜遞歸回溯

我幾乎沒有這個地方。我能夠編寫一個程序,查找所有可能的String字母組合以及類似的東西,但我一直無法使用二進制和整數對這個特定問題取得任何進展。

顯然,解決此問題的最佳方法是定義一個幫助器方法,該方法接受與原始方法不同的參數,並將最終打印的字符串集合爲一組字符。

重要說明:本練習中我不應該使用for循環。

編輯 - 重要提示:我需要拖尾0以便所有輸出的長度相同。

到目前爲止,這是我:

public void countBinary(int n) 
{ 
    String s = "01"; 
    countBinary(s, "", n); 
} 
private static void countBinary(String s, String chosen, int length) 
{ 
    if (s.length() == 0) 
    { 
     System.out.println(chosen); 
    } 
    else 
    { 
     char c = s.charAt(0); 
     s = s.substring(1); 
     chosen += c; 
     countBinary(s, chosen, length); 
     if (chosen.length() == length) 
     { 
      chosen = chosen.substring(0, chosen.length() - 1); 
     } 
     countBinary(s, chosen, length); 
     s = c + s; 
    } 
} 

當我運行我的代碼我的輸出看起來像this

任何人都可以向我解釋爲什麼我的方法沒有按照我期望的方式運行,並且如果可能的話向我顯示解決方案,以便我可以得到正確的輸出?謝謝!

回答

2

有更有效的方式來做到這一點,但是這會給你一個開始:

public class BinaryPrinter { 
    static void printAllBinary(String s, int n) { 
    if (n == 0) System.out.println(s); 
    else { 
     printAllBinary(s + '0', n - 1); 
     printAllBinary(s + '1', n - 1); 
    } 
    } 

    public static void main(String [] args) { 
    printAllBinary("", 4); 
    } 
} 

我就讓你制定出更有效的方式。

+0

謝謝!我將用它作爲未來問題的一個模板,我一定會繼續研究它,直到我完全理解你用遞歸完成了什麼。你幫了很多! – Trafton