组合数应用:从n个球中取出m个,问一共有多少种不同的取法
思想:如果m为0,那么一定只有一种取法,不用管n的个数 ,返回1;如果n小于m,比如从3个里面取4个,很显然是不可能的,返回0;如果n等于m,返回1;其他情况:假设有一个标记的球(实际没有),那么从n个球中取出m个球就有两种结果,带有标记的一堆,和不带有标记的一堆,假设函数F(N,M),那么将是F(N-1,M-1)+F(N-1,M)。
代码实现:
#include <iostream>
#include <cmath>
using namespace std;
int f(int n,int m)
{
if(m == 0) return 1;
if(n < m) return 0;
if(n == m) return 1;
else return f(n-1,m-1) + f(n-1,m);
}
int main()
{
int n = 0;
int m = 0;
while(cin>>n>>m)
{
cout<<f(n,m)<<endl;
}
return 0;
}