算法篇:卡塔兰数的两种实现方法(解决凸多边形共有多少三角划分问题)

tech2022-08-11  127

//卡特兰数递归实现:超时

/*#include <iostream>

using namespace std;

int catalan(int n){

    if (n == 1) return 1;

    if (n == 2) return 1;

    int res = 0;

    for (int i = 1; i <= n - 1;i++){

        res += catalan(i)*catalan(n - i);

    }

    return res;

}

int main(){

    int n;

    while (cin >> n){

        cout << catalan(n-1) << endl;

    }

    return 0;

}*/

 

//卡特兰数非递归实现

#include <iostream>

using namespace std;

int arr[22];

 

int catalanNumber(int n){

        int arr[22];

        arr[1]=1;

        for(int i=2;i<n+1;i++){

            arr[i]=0;

            for(int j=1;j<i;j++)

                arr[i]+=arr[j]*arr[i-j];

        }

        return arr[n];

    }

int main(){

    int n;

    while (cin >> n){

        cout << catalanNumber(n-1) << endl;

    }

    return 0;

}

最新回复(0)