对于此题,要求0<=n,m<=100;输出结果
若直接递归,
int Binom(int n,int m)
{
if(m == 0||n == 0||m == n)
return 1;
else
return Binom(n-1,m)+Binom(n-1,m-1);
}
则需运行很长时间。故想到了用一个数组记录已经计算过的值,再次遇到时不必计算,可大大节省时间,具体如下:
#include<iostream>
using namespace std;
int b[105][105]={0};//用于记录
int Binom(int n,int m)
{
if(b[n][m]!=0)
return b[n][m];
if(m==0||n==0||m==n)
return 1;
else b[n][m] = Binom(n-1,m)+Binom(n-1,m-1);
return b[n][m];
}
int main()
{
int n,m;
while(1){
cin>>n>>m;
if(n==0&&m==0)break;
cout<<n<<" things taken "<<m<<" at a time is "<<Binom(n,m)<<" exactly."<<endl;
}
return 0;
}