fun递归函数求从M个数中,选择N个数,
f递归函数是进行N个数全排列
static int count = 0;
public static void main(String[] args) {
char[] a = { ‘1‘, ‘2‘, ‘3‘, ‘4‘ };
boolean h[] = new boolean[100];
int n = 3;
char[] b = new char[n];
fun(a, 0, n, b, h);
System.out.println(count);
}
// k是b数组大小, n选择几个数, h标记b里有没有。
static void fun(char a[], int k, int n, char b[], boolean h[]) {
if (k == n) {
f(b, 0);
} else if (k < n) {
for (int i = k; i < a.length; i++) {
if (!h[i]) {
b[k] = a[i];
h[i] = true;
} else {
break;
}
fun(a, k + 1, n, b, h);
h[i] = false;
}
} else
return;
}
static void f(char a[], int n) {
if (a.length == n) {
System.out.println(a);
count++;
} else {
for (int i = n; i < a.length; i++) {
char c = a[n];
a[n] = a[i];
a[i] = c;
f(a, n + 1);
c = a[n];
a[n] = a[i];
a[i] = c;
}
}
}
我还不会copy别人的Markdown的内容。只好先引用。
我的计算答案
123 132 213 231 321 312 124 142 214 241 421 412 143 134 413 431 341 314 423 432 243 234 324 342
总共24个。根据排列的计算公式A43,可以求出答案是24个,答案肉眼一看好像没有重复
我只能想到这样办法,不知道有没有办法把两个递归改成了一个。递归好难写啊,写了一上午。
原文:https://www.cnblogs.com/friend-c/p/12860049.html