Skip to content
Related Articles
Python Program for nth Catalan Number
• Last Updated : 20 Nov, 2020

Catalan numbers are a sequence of natural numbers that occurs in many interesting counting problems like following.

1) Count the number of expressions containing n pairs of parentheses which are correctly matched. For n = 3, possible expressions are ((())), ()(()), ()()(), (())(), (()()).

2) Count the number of possible Binary Search Trees with n keys (See this)
See this for more applications.

The first few Catalan numbers for n = 0, 1, 2, 3, … are 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, …

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Recursive Solution
Catalan numbers satisfy the following recursive formula. Following is the implementation of above recursive formula.

## Python3

 # A recursive function to find nth catalan numberdef catalan(n):    # Base Case    if n <= 1 :        return 1       # Catalan(n) is the sum of catalan(i)*catalan(n-i-1)    res = 0     for i in range(n):        res += catalan(i) * catalan(n-i-1)      return res  # Driver Program to test above functionfor i in range(10):    print(catalan(i), end= ' ')# This code is contributed by Nikhil Kumar Singh (nickzuck_007)
Output:
1 1 2 5 14 42 132 429 1430 4862


Dynamic Programming Solution –
We can observe that the above recursive implementation does a lot of repeated work (we can the same by drawing recursion tree). Since there are overlapping subproblems, we can use dynamic programming for this. Following is a Dynamic programming based implementation in C++.

## Python

 # A dynamic programming based function to find nth# Catalan numberdef catalan(n):    if (n == 0 or n == 1):        return 1      # Table to store results of subproblems    catalan = [0 for i in range(n + 1)]      # Initialize first two values in table    catalan = 1    catalan = 1      # Fill entries in catalan[] using recursive formula    for i in range(2, n + 1):        catalan[i] = 0        for j in range(i):            catalan[i] = catalan[i] + catalan[j] * catalan[i-j-1]      # Return last entry    return catalan[n]  # Driver codefor i in range (10):    print (catalan(i))# This code is contributed by Aditi Sharma
Output:
1
1
2
5
14
42
132
429
1430
4862


Please refer complete article on Program for nth Catalan Number for more details!

My Personal Notes arrow_drop_up