递归计算n个数中取k个的取法总数
不采用公式直接计算。
思路如下:
n个数中取k个,可以分为两种情况(假设n个数中某个数为s):
Ø 包含s;
Ø 不包含s。
包含s的取法总数为从剩余的n-1个数中取k-1个数的取法总数,即C(n-1,k-1);
不包含s的总数为从剩余的n-1个数中取k个数的取法总数,即C(n-1,k)。
结论如下:
当n>k>0时,
C(n,k) = C(n-1,k-1) + C(n-1,k);
当k==0或n==k时,
C(n,0) = C(n,k) = 1。
Java实现代码如下:
public class Test {
public staticint compute(int n, int k) {
if (k== 0 || n == k) {
return1;
}
returncompute(n - 1, k - 1) + compute(n - 1, k);
}
public staticvoid main(String[] args) {
System.out.println(compute(10,6));
}
}