前段时间看赵俊老师的教学是视频,其中给出了一道作业题,是让我们解决递归过程中重复计算的问题,题目如下:
使用递归方法来计算组合数:
从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。
公 式: C(m,n)=n!/((m-n)!*n!)(n≤m)
性 质:C(m,n)= C(m,m-n) --可以推导出--》 C(m,0) = C(m,m) = 1
C(m,n)=C(m-1,n-1)+C(m-1,n)
请使用递归的方法来计算组合数。
使用递归的方法去解决,代码如下:
// Divide and Conquer
int CombinationNumber(int m, int n)
{
// Part 1
if ( (n == 0) || (m == n) )
return 1;
// Part 2
return CombinationNumber(m-1, n) + CombinationNumber(m-1, n-1);
}