题解——栈(卡特兰递归数的应用)

//递归

#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 作者:松令

这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13521326.html