2015-07-12 146 views
-1

我有一個關於計算所有可能的組合的問題。例如,如果我有一個遞歸方法,給我輸出: a。 b 0 0 b。 0 1 c。 1 0 d。 1 1Java - 遞歸 - 計數所有組合

在這種情況下,我有8個可能的輸出。我應該如何使用java來計算它們? 我試圖使用一個計數器,但它給我4.

請幫助。 謝謝。 這是我的代碼。

public static void printAllAssignments(char set[], int k) { 
    int n = set.length; 
    printAllAssignments(set, "", n, k); 
} 

// The main recursive method to print all possible strings of length k 
public static void printAllAssignments(char set[], String prefix, int n, int k) { 

    // Base case: k is 0, print prefix 
    if (k == 0) { 
     counterTotalAssignments++; 
     System.out.println("Occupancies: " + prefix); 
     return; 
    } 

    // One by one add all characters from set and recursively 
    // call for k equals to k-1 
    for (int i = 0; i < n; ++i) { 

     // Next character of input added 
     String newPrefix = prefix + set[i]; 

     // k is decreased, because we have added a new character 
     printAllAssignments(set, newPrefix, n, k - 1); 

    } 
} 

public static void main(String[] args) { 
char charSet[] = {'0', '1'}; 
    int k = 2; 
    printAllAssignments(charSet, k); 
    System.out.println("Total number of assignments: " + counterTotalAssignments); 
} 

output: 
Occupancies: 00 
Occupancies: 01 
Occupancies: 10 
Occupancies: 11 
Total number of assignments: 4 
+0

exp(n,k)?!爲什麼要算你什麼時候可以變得更聰明? –

回答

1

沒有理由指望他們,當他們可以從你的輸入來計算:

combinations = exp (possible values per digit, number of digits) 

如果硬要計算他們,我會使用在你的情況下未使用的返回值:

讓基本情況返回1,並在遞歸情況下返回遞歸調用的返回值的總和。


我剛剛注意到你的櫃檯正在給你正確的價值。你爲什麼期待它是8?

00 // 1. 
01 // 2. 
10 // 3. 
11 // 4. 
+0

我知道這個方法bro,但我們不允許使用x^y方法:p – bond007

+0

你可以自己寫,但保留你必須數的限制:你已經做了,而且是正確的。我展示了另一個解你真的需要計算可能的結果,還是你要計算遞歸調用? –

+0

好吧,它應該返回存在多少分配。 0,0被計爲2個賦值。等等。總共有8個作業。 – bond007