求组合数
从n个数里面取m个数 (递归实现)
/**
* Description:
* 求组合数(递归法)
* 从n个数里面取m个数 算法分析:
* 用递归的方法,每选出一个数字之后就把这个数字去掉,用剩余的数字继续递归
* @author cm
*
*/
public class Combination
{
private int m;
private int[] res; //存放结果数组
private int[] arr; //被选择的数组
private int count = 0;
private int total = 0; //总数
/**
* @param m 选择的个数
* @param arr 被选择的数组
*
*/
public Combination(int m, int[] arr)
{
this.m = m;
this.arr = arr;
res = new int[m];
}
/**
* 求组合数
*/
public void combination()
{
comb(0);
}
/**
* @param start 递归调用的开始下标
*/
private void comb(int start)
{
if (count == m)
{
print();
total++;
return;
}
for (int i = start; i < arr.length; i++)
{
res[count] = arr[i];
count++;
comb(i+1); //递归调用
count--;
}
}
//打印结果
private void print()
{
for (int i = 0; i < res.length; i++)
{
System.out.print(res[i] + " ");
}
System.out.println();
}
/**
* @return 返回组合数的个数
*/
public int getTotal()
{
return total;
}
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8,9};
//9选7
Combination comb = new Combination(7,arr);
comb.combination();
System.out.println(comb.getTotal());
}
}