GeeksforGeeks App
Open App
Browser
Continue

# Number of ways a convex polygon of n+2 sides can split into triangles by connecting vertices

Given a convex polygon with n+2 sides. The task is to calculate the number of ways in which triangles can be formed by connecting vertices with non-crossing line segments.
Examples:

Input: n = 1
Output: 1
It is already a triangle so it can only be formed in 1 way.
Input: n = 2
Output: 2
It can be cut into 2 triangles by using either pair of opposite vertices.

The above problem is an application of a catalan numbers. So, the task is to only find the n’th Catalan Number. First few catalan numbers are 1 1 2 5 14 42 132 429 1430 4862, … (considered from 0th number)
Below is the program to find Nth catalan number:

## C++

 `// C++ program to find the``// nth catalan number``#include ``using` `namespace` `std;` `// Returns value of Binomial Coefficient C(n, k)``unsigned ``long` `int` `binomialCoeff(unsigned ``int` `n,``                                ``unsigned ``int` `k)``{``    ``unsigned ``long` `int` `res = 1;` `    ``// Since C(n, k) = C(n, n-k)``    ``if` `(k > n - k)``        ``k = n - k;` `    ``// Calculate value of``    ``// [n*(n-1)*---*(n-k+1)] / [k*(k-1)*---*1]``    ``for` `(``int` `i = 0; i < k; ++i) {``        ``res *= (n - i);``        ``res /= (i + 1);``    ``}` `    ``return` `res;``}` `// A Binomial coefficient based function``// to find nth catalan``// number in O(n) time``unsigned ``long` `int` `catalan(unsigned ``int` `n)``{``    ``// Calculate value of 2nCn``    ``unsigned ``long` `int` `c = binomialCoeff(2 * n, n);` `    ``// return 2nCn/(n+1)``    ``return` `c / (n + 1);``}` `// Driver code``int` `main()``{``    ``int` `n = 3;``    ``cout << catalan(n) << endl;` `    ``return` `0;``}`

## Java

 `// Java program to find the``// nth catalan number``class` `GFG``{` `// Returns value of Binomial``// Coefficient C(n, k)``static` `long` `binomialCoeff(``int` `n,``                          ``int` `k)``{``    ``long` `res = ``1``;` `    ``// Since C(n, k) = C(n, n-k)``    ``if` `(k > n - k)``        ``k = n - k;` `    ``// Calculate value of``    ``// [n*(n-1)*---*(n-k+1)] /``    ``// [k*(k-1)*---*1]``    ``for` `(``int` `i = ``0``; i < k; ++i)``    ``{``        ``res *= (n - i);``        ``res /= (i + ``1``);``    ``}` `    ``return` `res;``}` `// A Binomial coefficient``// based function to find``// nth catalan number in``// O(n) time``static` `long` `catalan( ``int` `n)``{``    ``// Calculate value of 2nCn``    ``long` `c = binomialCoeff(``2` `* n, n);` `    ``// return 2nCn/(n+1)``    ``return` `c / (n + ``1``);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``3``;``    ``System.out.println(catalan(n));``}``}` `// This code is contributed``// by Arnab Kundu`

## Python3

 `# Python3 program to find the``# nth catalan number` `# Returns value of Binomial``# Coefficient C(n, k)``def` `binomialCoeff(n, k):` `    ``res ``=` `1``;` `    ``# Since C(n, k) = C(n, n-k)``    ``if` `(k > n ``-` `k):``        ``k ``=` `n ``-` `k;` `    ``# Calculate value of``    ``# [n*(n-1)*---*(n-k+1)] /``    ``# [k*(k-1)*---*1]``    ``for` `i ``in` `range``(k):` `        ``res ``*``=` `(n ``-` `i);``        ``res ``/``=` `(i ``+` `1``);` `    ``return` `res;` `# A Binomial coefficient based``# function to find nth catalan``# number in O(n) time``def` `catalan(n):``    ` `    ``# Calculate value of 2nCn``    ``c ``=` `binomialCoeff(``2` `*` `n, n);` `    ``# return 2nCn/(n+1)``    ``return` `int``(c ``/` `(n ``+` `1``));` `# Driver code``n ``=` `3``;``print``(catalan(n));` `# This code is contributed``# by mits`

## C#

 `// C# program to find the``// nth catalan number``using` `System;` `class` `GFG``{` `// Returns value of Binomial``// Coefficient C(n, k)``static` `long` `binomialCoeff(``int` `n,``                          ``int` `k)``{``    ``long` `res = 1;` `    ``// Since C(n, k) = C(n, n-k)``    ``if` `(k > n - k)``        ``k = n - k;` `    ``// Calculate value of``    ``// [n*(n-1)*---*(n-k+1)] /``    ``// [k*(k-1)*---*1]``    ``for` `(``int` `i = 0; i < k; ++i)``    ``{``        ``res *= (n - i);``        ``res /= (i + 1);``    ``}` `    ``return` `res;``}` `// A Binomial coefficient``// based function to find``// nth catalan number in``// O(n) time``static` `long` `catalan( ``int` `n)``{``    ``// Calculate value of 2nCn``    ``long` `c = binomialCoeff(2 * n, n);` `    ``// return 2nCn/(n+1)``    ``return` `c / (n + 1);``}` `// Driver code``public` `static` `void` `Main()``{``    ``int` `n = 3;``    ``Console.WriteLine(catalan(n));``}``}` `// This code is contributed``// by Subhadeep`

## PHP

 ` ``\$n` `- ``\$k``)``        ``\$k` `= ``\$n` `- ``\$k``;` `    ``// Calculate value of``    ``// [n*(n-1)*---*(n-k+1)] /``    ``// [k*(k-1)*---*1]``    ``for` `(``\$i` `= 0; ``\$i` `< ``\$k``; ++``\$i``)``    ``{``        ``\$res` `*= (``\$n` `- ``\$i``);``        ``\$res` `/= (``\$i` `+ 1);``    ``}` `    ``return` `\$res``;``}` `// A Binomial coefficient based``// function to find nth catalan``// number in O(n) time``function` `catalan(``\$n``)``{``    ``// Calculate value of 2nCn``    ``\$c` `= binomialCoeff(2 * ``\$n``, ``\$n``);` `    ``// return 2nCn/(n+1)``    ``return` `\$c` `/ (``\$n` `+ 1);``}` `// Driver code``\$n` `= 3;``echo` `catalan(``\$n``);` `// This code is contributed``// by chandan_jnu.``?>`

## Javascript

 ``

Output:

`5`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up