PHP Program for nth Catalan Number
Last Updated :
09 Nov, 2023
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.
- Count the number of expressions containing n pairs of parentheses that are correctly matched. For n = 3, possible expressions are ((())), ()(()), ()()(), (())(), (()()).
- Count the number of possible Binary Search Trees with n keys (See this)
- Count the number of full binary trees (A rooted binary tree is full if every vertex has either two children or no children) with n+1 leaves.
- Given a number n, return the number of ways you can draw n chords in a circle with 2 x n points such that no 2 chords intersect.
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:
- Base condition for the recursive approach, when n <= 1, return 1
- Iterate from i = 0 to i < n
- Make a recursive call catalan(i) and catalan(n – i – 1) and keep adding the product of both into res.
- Return the res.
Below is the implementation of the above approach:
PHP
<?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
?>
Output1 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
// 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.
?>
Output1 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.
C_n=\frac{1}{n+1}\binom{2n}{n}
Below are the steps for calculating nCr.
- Create a variable to store the answer and change r to n - r if r is greater than n - r because we know that C(n, r) = C(n, n-r) if r > n - r
- Run a loop from 0 to r-1
- In every iteration update ans as (ans*(n-i))/(i+1), where i is the loop counter.
- So the answer will be equal to ((n/1)*((n-1)/2)*…*((n-r+1)/r), which is equal to nCr.
Below are steps to calculate Catalan numbers using the formula: 2nCn/(n+1)
- Calculate 2nCn using the similar steps that we use to calculate nCr
- Return the value 2nCn/ (n + 1)
Below is the implementation of the above approach:
PHP
<?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
?>
Output1 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.
C_n=\frac{(2n)!}{(n+1)!n!}=\prod_{k=2}^{n}\frac{n+k}{k} \ for \ n\geq 0
C_n = \frac{2(2n-1)}{n+1}*C_{n-1} \ \ \ {|} \ \ {n>0}
PHP Program for nth Catalan Number using the previous Catalan Number:
Below are steps to calculate Catalan numbers using the above formula:
- Initialize a variable res = 1
- Print 1 as the first Catalan Number
- Iterate from i = 1 to i < n
- Update res with res = (res * (4 * i - 2)) / (i + 1)
- print res
Below is the implementation for the above approach:
PHP
<?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);
?>
Output1 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!
Similar Reads
PHP Program for Coin Change | DP-7
Write a PHP program for a given integer array of coins[ ] of size N representing different types of denominations and an integer sum, the task is to find the number of ways to make a sum by using different denominations. Examples: Input: sum = 4, coins[] = {1,2,3}, Output: 4Explanation: there are fo
6 min read
PHP Program to Count set bits in an integer
Write an efficient program to count number of 1s in binary representation of an integer. Examples : Input : n = 6 Output : 2 Binary representation of 6 is 110 and has 2 set bits Input : n = 13 Output : 3 Binary representation of 11 is 1101 and has 3 set bits Recommended: Please solve it on âPRACTICE
2 min read
Write a program to display Reverse of any number in PHP ?
Write a program to reverse the digits of an integer. Examples : Input : num = 12345 Output: 54321 Input : num = 876 Output: 678 It can be achieved using Iterative way or Recursive Way Iterative Method: Algorithm: Input: num (1) Initialize rev_num = 0 (2) Loop while num > 0 (a) Multiply rev_num by
2 min read
How to convert a String into Number in PHP ?
Strings in PHP can be converted to numbers (float/ int/ double) very easily. In most use cases, it won't be required since PHP does implicit type conversion. This article covers all the different approaches for converting a string into a number in PHP, along with their basic illustrations.There are
4 min read
Output of PHP programs | Set 3
Predict the output of below PHP programs: Question 1 PHP <?php $number = array(0, 1, one, two, three, 5); $num = preg_grep("/[0-5]/", $number); print_r($num); ?> Options: Array([0]=>0 [1]=>1 [2]=>one [3]=>two [4]=>three [5]=>5) Array([2]=>one [3]=>two [4]=>
3 min read
PHP program to swap two numbers
Integer values can be stored in a variable in PHP. It is easy to store and modify and swap these integer values using various mentioned approaches: Using a temporary variable: The value of the first number is stored in the temporary variable. This value is then replaced by the value of the second nu
4 min read
Program to print multiplication table of any number in PHP
In this article, we will see how to print the multiplication table of any given number using PHP. To make the multiplication table, first, we get a number input from the user and then use for loop to display the multiplication table. We use HTML and PHP to display the multiplication table. The HTML
1 min read
PHP | Factorial of a number
In mathematics, the factorial of a number is the product of all positive integers less than or equal to that number. It is denoted by n!. The factorial of a number can be expressed mathematically as: n! = n * (n-1) * (n-2) * ........ * 1Methods to Calculate Factorials in PHPThere are several methods
3 min read
How to Convert a Given Number to Words in PHP?
Given an integer N, your task is to convert the given number into words using PHP.Examples:Input: N = 958237764Output: Nine Hundred Fifty Eight Million Two Hundred Thirty Seven Thousand Seven Hundred Sixty FourInput: N = 5000Output: Five ThousandBelow are the approaches to convert a given number to
5 min read
PHP Program to Print ASCII Value of all Digits of a Given Number
Given a number, the task is to print ASCII value of all digits of a given number in PHP. ASCII values are often used to represent characters and digits. Sometimes, it's necessary to find the ASCII value of each digit in a given number, especially when dealing with character encoding or data manipula
3 min read