# Python Program for nth Catalan Number

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.

## Python

 # A recursive function to find nth catalan number  def 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 function  for i in range(10):      print catalan(i),  # 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 number  def 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 code  for 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
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.