卡特兰数列
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1)
size_t Catalan(size_t n)
{
if(n < 2) return 1;
vector<size_t> arr(n+1,0);
arr[0] = arr[1] = 1;
for(int i = 2; i <= n; i++)
{
for(int k = 0; k < i; k++)
arr[i] += (arr[k] * arr[i-1-k]);
}
return arr[n];
}
size_t CatalanR(size_t n)
{
if (n > 1){
size_t re = 0;
for (int i = 1; i <= n; ++i)
re += CatalanR(i - 1) * CatalanR(n - i);
return re;
}
else
return 1;
}
size_t CatalanR2(size_t n)
{
if (n > 1){
return 2 * (2 * n - 1) * CatalanR2(n - 1) / (n + 1);
}
else
return 1;
}
size_t CatalanR3(size_t n)
{
int a=1;
for(int i=2; i<= n;i++)
a=2*(2*i-1)*a/(i+1);
return a;
}