//递归
#include <iostream>
#include <cstdio>
using namespace std;
int a[100];
int fun(int n)
{
if(n==0) return 1;
if(n==1) return 1;
if(n==2) return 2;
if(n>2)
{
int s=0;
for(int j=0;j<n;j++)
s=s+fun(j)*fun(n-j-1);
return s;
}
}
int main()
{
int n; cin>>n;
cout<<fun(n);
return 0;
}
//递推
#include <iostream>
#include <cstdio>
#include <iostream>
using namespace std;
int a[105]={1,1};
void fun()
{
for(int i=2;i<=10;i++) //这里只算了前10位
for(int j=0;j<i;j++)
a[i]+=a[j]*a[i-j-1];
}
int main()
{
fun();
cout<<a[5];
return 0;
}
关于卡特兰数的其他表达式以及关于卡特兰数的其他应用模型可参考下链接:
会发现(不同模型共同的特性:进栈数>出栈数(n个)、左括号数>右括号数(n对)、5元钱数>10元钱数(n对))
https://www.cnblogs.com/bbqub/p/Catalan.html#3281581982 作者:松令