int catalan(int n) { int i; if(memo[n] != 0) return memo[n]; if(n == 0 || n == 1) return 1; for (i = 0; i < n; i++) { memo[n] += catalan(i)*catalan(n-i-1); } return memo[n]; }
int main() { int n; printf("input n:"); scanf("%d", &n); printf("catalan(%d) is %d\n", n, catalan(n)); return 0; }
int main() { int n, t = 1; catalan(); while (scanf("%d", &n) && n != -1) { printf("%d %d %lld\n", t++, n, 2 * cata[n + 1]); } return 0; }
int main() { catalan(); while(~scanf("%d",&n)){ for(k=a[n][0];k;k--)printf("%d",a[n][k]); puts(""); } return 0; }
int main(){ int i,n; memset(op1,0, PREC); memset(op2,0, PREC); while(scanf("%d",&n) != EOF){ catalan(n); rev(res); printf("%s\n",res); } return 0; }
int main(void){ int n; int i; scanf("%d",&n); memo = (int *)malloc(n * sizeof(n)); for (i = 0; i < n; i++) { memo[i] = 0; } printf("%d",catalan(n)); return 0; }
void catalan(int n){ if(n<=1){ memcpy(res,"1",2); return; } catalan(n-1); int m = n-1; int aux = 2*(2*m+1); set_op1(aux); memcpy(op2,res,PREC); mult(); memcpy(op1,res,PREC); divide_by(m+2); }
int numTrees(int n) { if(n==0) return 1; if(n==1) return 1; if(n==2) return 2; vector<int> catalan(n+1); catalan[0] = 1; catalan[1] = 1; catalan[2] = 2; for(int i=3;i<=n;i++) { catalan[i] = 0; for(int j=0;j<=i-1;j++) { catalan[i] += catalan[j]*catalan[i-1-j]; } } return catalan[n]; }
int main() { for (int i = 0; i < 30; i++) std::cout << catalan(i) << '\n'; }