Loading

递归实现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();
            }
        }
    }
}

posted @ 2020-11-22 14:57  沿途有余弦  阅读(588)  评论(0)    收藏  举报