卡特兰数(Catalan number)
引入
卡特兰数(Catalan number)是组合数学中一个常出现在各种计数问题中的数列。通常用
数列的前几项为:
与我们熟知的斐波那契数列类似都是一个通过递推得到的数列。相较于斐波那契数列,卡特兰数还可以用数学的组合数公式表示出来。
递推式
我们先来推导一下卡特兰数的递推式。 来看一个相对好想的例题:
一个凸 (
当
构成了一个三角形,显然只有一种分发,
当
四边形共有两种分发法,
通过观察发现:无论怎么分任意一边总是一个三角形的边。
那么我们只需要以任意一条边来构建三角形来计算。
我们以
先连接
左边没有图形,右边构成了一个四边形。那么左边的方法数是
其方法数分别为
代码实现:
void Catalan(int n)
{
if(C[n])return;
for(int k=0;k<n;k++)Catalan(k);
for(int k=0;k<n;k++)C[n]+=C[k]*C[n-k-1];
}