如何计算递归函数中的组合?



那么,我有这段代码,它接受类似printAllPossibilities("1234", 2)的东西,并打印长度为2的字符串的所有组合。

我希望它能够找到所有可能的组合(对于另一部分,我将在稍后添加)并计算找到的组合总数。我试着在for循环中添加一个计数器,但它似乎没有按照我应用它的方式工作。任何想法都很感激!

static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
}
static void printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
return;
}
for (int i = 0; i < charSet.length(); i++)
printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}

如果我正确理解了您的代码,您可以执行以下操作:

static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
}
// declare counter
static int counter = 0;
static void printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
// increment counter
counter += 1;
return;
}
for (int i = 0; i < charSet.length(); i++)
printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}

当你认为合适时输出counter

您可以通过这种方式计算组合的数量

static void printAllPossibilities(String charSet, int length) {
int cnt = printAllPossibilities_(charSet, length, "");
System.out.println(cnt);
}
static int printAllPossibilities_(String charSet, int length, String temp) {
if (length == 0) {
System.out.println(temp);
return 1;
}

int res = 0;
for (int i = 0; i < charSet.length(); i++) {
res += printAllPossibilities_(charSet, length - 1, temp + charSet.charAt(i));
}
return res;
}

也可以用Permutations with Repetition公式

static void printAllPossibilities(String charSet, int length) {
printAllPossibilities_(charSet, length, "");
int cnt = (int) Math.pow(charSet.length(), length);
System.out.println();
System.out.println(cnt);
}

最新更新