PHP 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.
C_0=1 \ and \ C_n_+_1=\sum_{i=0}^{n}C_iC_n_-_i \ for \ n\geq 0;
Following is the implementation of above recursive formula.

PHP



filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program for nth 
// Catalan Number
  
// A recursive function to
// find nth catalan number
function catalan($n)
{
      
    // Base case
    if ($n <= 1)
        return 1;
  
    // catalan(n) is sum of 
    // catalan(i)*catalan(n-i-1)
    $res = 0;
    for($i = 0; $i < $n; $i++)
        $res += catalan($i) * 
                catalan($n - $i - 1);
  
    return $res;
}
  
    // Driver Code
    for ($i = 0; $i < 10; $i++)
        echo catalan($i), " ";
  
// This code is contributed aj_36
?>

chevron_right


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++.

PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program for nth Catalan Number
  
// A dynamic programming based function 
// to find nth Catalan number
function catalanDP( $n)
{
      
    // Table to store results 
    // of subproblems
    $catalan= array();
  
    // Initialize first two 
    // values in table
    $catalan[0] = $catalan[1] = 1;
  
    // Fill entries in catalan[] 
    // using recursive formula
    for ($i = 2; $i <= $n; $i++)
    {
        $catalan[$i] = 0;
        for ( $j = 0; $j < $i; $j++)
            $catalan[$i] += $catalan[$j] * 
                   $catalan[$i - $j - 1];
    }
  
    // Return last entry
    return $catalan[$n];
}
  
    // Driver Code
    for ($i = 0; $i < 10; $i++)
        echo catalanDP($i), " ";
  
// This code is contributed anuj_67.
?>

chevron_right


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.