计算组合数

//计算组合数
long long C(long long n, long long m)
{
	if (m == 0 || m == n)return 1;
	return C(n - 1, m) + C(n-1, m-1);
}
long long res[67][67] = { 0 };
//递归
long long C1(long long n, long long m)
{
	if (m == 0 || m == n)return 1;
	if (res[n][m] != 0)return res[n][m];
	else
		return res[n][m] = C1(n-1,m)+C1(n-1,m-1);
}
//递推
const int n = 60;
void calC()
{
	for (int i = 0; i < n; i++)
	{
		res[i][0] = 1;
		res[i][i] = 1;
	}
	for (int i = 2; i <= n; i++)
	{
		for (int j = 0; j <=i / 2; j++)
		{
			res[i][j] = res[i - 1][j] + res[i - 1][j - 1];
			res[i][i-j] = res[i][j];
		}
	}
}
//通过定义式的变形来计算
long long C(long long n, long long m)
{
	long long ans = 1;
	for (long long i = 1; i <= m; i++)
	{
		ans = ans * (n - m + i) / i;
	}
	return ans;
}
posted @ 2021-09-02 20:37  小帆敲代码  阅读(16)  评论(0)    收藏  举报