Java - 递归 - 计算所有组合

时间:2015-07-12 17:44:12

标签: java recursion permutation

我有一个关于计算所有可能组合的问题。例如,如果我有一个递归方法,给我一个输出: 一个。 0 0 湾0 1 C。 1 0 d。 1 1

在这种情况下,我有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

1 个答案:

答案 0 :(得分:1)

没有理由计算它们,可以根据您的输入进行计算:

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

如果你坚持计算它们,我会在你的情况下使用未使用的返回值:

让基本案例返回1,并在递归情况下返回递归调用的返回值之和。

我刚注意到你的柜台正在给你正确的价值。你为什么期望它是8?

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