递归实现C(m,n)从m个数中取出n个
从M个数中任意取出N个数,并打印结果,
思路:
假设从5个数中任意取3个;相当于从5个数中取出1个后,在剩下的4个里任取2个;
而从4个里任取2个又相当于从4个里取出1个后在剩下的3个里任取1个。
public class Cmn {
// 从m个数中取n个数
static int[] RES;//用来保存取出的结果
public static void main(String[] args) {
C(13, 5);
}
public static void C(int m, int n) {
RES = new int[n];
func(m, n);
}
public void func(int m, int n) {
int i, j;
for (i = n; i <= m; i++) {
// 从m个元素选出n个,则至少需要n个元素,所以先去最后一个元素,从n开始
RES[n - 1] = i;
if (n > 1) {
// 元素个数减一,从当前元素前面的元素中选取剩余元素
func(i - 1, n - 1);
} else {
for (j = 0; j < RES.length; j++)
System.out.print(RES[j] + " ");
System.out.println();
}
}
}
}

浙公网安备 33010602011771号