Java-递归-计算所有组合

Java-递归-计算所有组合,java,recursion,permutation,Java,Recursion,Permutation,我有一个关于计算所有可能的组合的问题。例如,如果我有一个递归方法,它的输出为: A.0 0 B0 1 C1 0 D11 在这种情况下,我有8个可能的输出。我应该如何使用java计算它们? 我试着用一个计数器,但它给了我4 请帮忙。 谢谢 这是我的密码 public static void printAllAssignments(char set[], int k) { int n = set.length; printAllAssignments(set, "", n, k);

我有一个关于计算所有可能的组合的问题。例如,如果我有一个递归方法,它的输出为: A.0 0 B0 1 C1 0 D11

在这种情况下,我有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
publicstaticvoidprintalassignments(字符集[],int k){
int n=设置长度;
打印分配(集合“”,n,k);
}
//打印长度为k的所有可能字符串的主要递归方法
公共静态void printalassignments(字符集[],字符串前缀,int n,int k){
//基本情况:k为0,打印前缀
如果(k==0){
计数器++;
System.out.println(“占用:+前缀);
返回;
}
//一个接一个地从集合中递归添加所有字符
//要求k等于k-1
对于(int i=0;i
如果可以根据您的输入进行计算,则没有理由对其进行计数:

combinations = exp (possible values per digit, number of digits)
如果您坚持计算它们,我会在您的案例中使用未使用的返回值:

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


我刚刚注意到你的计数器给出了正确的值。你为什么期望是8点

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

exp(n,k)?!我知道这个方法,兄弟,但我们不允许使用x^y方法:p你可以在自己身上写,但要保持你必须计算的限制:你已经这样做了,这是正确的。我展示了另一个解决方案。你真的需要计算可能的结果吗,或者你有去计算递归调用吗?它应该返回存在多少个赋值。0,0计为2个赋值。等等总共是8个作业。我看不出这方面的数学背景,但因为每个字符串都有相同的长度,k,只需乘以k。是的,我想这也行。我试试看。这也让我困惑,我不明白为什么我们不能使用x^y:p