Given an interger n; the task is to find the Catalan Number on that nth position. So, before doing the program we must know what is a Catalan Number?
Catlan numbers are the sequence of natural numbers, which occurs in the form of various counting number problems.
Catalan numbers C0, C1, C2,… Cn are driven by formula −
$$c_{n}=\frac{1}{n+1}\binom{2n}{n} = \frac{2n!}{(n+1)!n!}$$
The few Catalan numbers for every n = 0, 1, 2, 3, … are 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, …
So if we entered n =3 we should get 5 as an output from the program
Some of few applications of Catalan numbers −
- Counting the number of possible binary search trees with n keys.
- Finding the number of expressions containing n pair of parenthesis which are correctly matched. Like for n = 3 the possible parenthesis expression would be ((())), ()(()), ()()(), (())(), (()()).
- Finding number of ways to connect point on circle disjoint chords, and many more.
Example
Input: n = 6 Output: 132 Input: n = 8 Output: 1430
Approach we will be using to solve the given problem −
- Taking and input n.
- Check If n <= 1 then, Return 1
- Loop from i=0 to i<n and i++
- For every i Set result = result + (catalan(i)*catalan(n-i-1))
- Return and print the result.
Algorithm
Start Step 1 -> In function unsigned long int catalan(unsigned int n) If n <= 1 then, Return 1 End if Declare an unsigned long variable res = 0 Loop For i=0 and i<n and i++ Set res = res + (catalan(i)*catalan(n-i-1)) End Loop Return res Step 2 -> int main() Declare an input n = 6 Print "catalan is : then call function catalan(n) Stop
Example
#include <stdio.h> // using recursive approach to find the catalan number unsigned long int catalan(unsigned int n) { // Base case if (n <= 1) return 1; // catalan(n) is sum of catalan(i)*catalan(n-i-1) unsigned long int res = 0; for (int i=0; i<n; i++) res += catalan(i)*catalan(n-i-1); return res; } //Main function int main() { int n = 6; printf("catalan is :%ld\n", catalan(n)); return 0; }
Output
catalan is :132