Open In App

PHP Program for nth Catalan Number

Catalan numbers are defined as a mathematical sequence that consists of positive integers, which can be used to find the number of possibilities of various combinations.
Catalan numbers occur in many interesting counting problems like the following.

Examples:



Input: n = 6
Output: 132

Input: n = 8
Output: 1430



PHP Program for nth Catalan Number using Recursive Solution:

Catalan numbers satisfy the following recursive formula: 

Step-by-step approach:

Below is the implementation of the above approach:

<?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
?>

                    

Output
1 1 2 5 14 42 132 429 1430 4862 

Time Complexity:

PHP Program for nth Catalan Number using Dynamic Programming:

Step-by-step approach:

  • Create an array catalan[] for storing ith Catalan number.
  • Initialize, catalan[0] and catalan[1] = 1
  • Loop through i = 2 to the given Catalan number n.
    • Loop through j = 0 to j < i and Keep adding value of catalan[j] * catalan[i – j – 1] into catalan[i].
  • Finally, return catalan[n]

Below is the implementation of the above approach:

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

                    

Output
1 1 2 5 14 42 132 429 1430 4862 

Time Complexity: O(n2)
Auxiliary Space: O(n)

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

PHP Program for nth Catalan Number using Binomial Coefficient:

We can also use the below formula to find nth Catalan number in O(n) time.

Below are the steps for calculating nCr.

Below are steps to calculate Catalan numbers using the formula: 2nCn/(n+1)

Below is the implementation of the above approach:

<?php
// PHP program for nth Catalan Number
 
// Returns value of Binomial
// Coefficient C(n, k)
function 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 = 0; $i < $k; ++$i)
    {
        $res *= ($n - $i);
        $res = floor($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 floor($c / ($n + 1));
}
 
// Driver code
for ($i = 0; $i < 10; $i++)
echo catalan($i), " " ;
 
// This code is contributed by Ryuga
?>

                    

Output
1 1 2 5 14 42 132 429 1430 4862 

Time Complexity: O(n).
Auxiliary Space: O(1)

We can also use the below formulas to find nth Catalan number in O(n) time. 

PHP Program for nth Catalan Number using the previous Catalan Number:

Below are steps to calculate Catalan numbers using the above formula:

Below is the implementation for the above approach:

<?php
 
// Function to calculate and print the first n Catalan numbers
function catalan($n) {
    $res = 1;
    echo $res . " ";
 
    for ($i = 1; $i < $n; $i++) {
        // Calculate the ith Catalan number
        $res = intval($res * (4 * $i - 2) / ($i + 1));
        echo $res . " ";
    }
}
 
$n = 10;
 
// Function call
catalan($n);
?>

                    

Output
1 1 2 5 14 42 132 429 1430 4862 

Time Complexity: O(n)
Auxiliary Space: O(1), since no extra space has been taken.

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


Article Tags :