一共有两种方法:
1)递归调用
2)动态规划
1)递归调用
int bino1(int n, int r)//二项式的递归求法
{
if (r == 0 || r == n)
return 1;
return bino1(n - 1, r - 1) + bino1(n - 1, r);
}
2)利用动态规划
int dp[1000][1000];
const int M = 100000000000 + 100;
int bino2(int n, int r)//利用动态规划
{
memset(dp, 0, sizeof(dp));
if (r == 0 || r == n)
{
return 1;
}
if (dp[n][r] != 0)
{
return dp[n][r];
}
return dp[n][r] = min(bino2(n - 1, r - 1) + bino2(n - 1, r),M);//这里取最小值是因为:C(200,100)大概是900兆,远超过int的取值范围
}