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
function catalan( $n )
{
if ( $n <= 1)
return 1;
$res = 0;
for ( $i = 0; $i < $n ; $i ++)
$res += catalan( $i ) *
catalan( $n - $i - 1);
return $res ;
}
for ( $i = 0; $i < 10; $i ++)
echo catalan( $i ), " " ;
?>
|
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
function catalanDP( $n )
{
$catalan = array ();
$catalan [0] = $catalan [1] = 1;
for ( $i = 2; $i <= $n ; $i ++)
{
$catalan [ $i ] = 0;
for ( $j = 0; $j < $i ; $j ++)
$catalan [ $i ] += $catalan [ $j ] *
$catalan [ $i - $j - 1];
}
return $catalan [ $n ];
}
for ( $i = 0; $i < 10; $i ++)
echo catalanDP( $i ) , " " ;
?>
|
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.
[Tex]C_n=\frac{1}{n+1}\binom{2n}{n}
[/Tex]
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
function binomialCoeff( $n , $k )
{
$res = 1;
if ( $k > $n - $k )
$k = $n - $k ;
for ( $i = 0; $i < $k ; ++ $i )
{
$res *= ( $n - $i );
$res = floor ( $res / ( $i + 1));
}
return $res ;
}
function catalan( $n )
{
$c = binomialCoeff(2 * ( $n ), $n );
return floor ( $c / ( $n + 1));
}
for ( $i = 0; $i < 10; $i ++)
echo catalan( $i ), " " ;
?>
|
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.
[Tex]C_n=\frac{(2n)!}{(n+1)!n!}=\prod_{k=2}^{n}\frac{n+k}{k} \ for \ n\geq 0
[/Tex]
[Tex]C_n = \frac{2(2n-1)}{n+1}*C_{n-1} \ \ \ {|} \ \ {n>0}
[/Tex]
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 catalan( $n ) {
$res = 1;
echo $res . " " ;
for ( $i = 1; $i < $n ; $i ++) {
$res = intval ( $res * (4 * $i - 2) / ( $i + 1));
echo $res . " " ;
}
}
$n = 10;
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 Nth Fibonacci Number
The Fibonacci sequence is a series of numbers where each number is the sum of the two preceding ones, usually starting with 0 and 1. In this article, we will write a PHP program to find the Nth Fibonacci number. Table of Content Iterative MethodRecursive MethodIterative MethodFirst, we define a func
2 min read
PHP Program to Find all factors of a Number
Given a Number, the task is to find all factors of the number in PHP. Factors are numbers that divide another number without leaving a remainder. In this article, we will cover all approaches to find all factors of a number using PHP. Table of Content Using a LoopUsing Square Root OptimizationUsing
3 min read
PHP Program to Check for Lucky Numbers
We have given an input number, and our task is to check if it is a lucky number or not in PHP based on the criteria that all digits in the number must be different. Examples: Input: n = 7Output: 7 is a lucky numberInput: n = 9Output: 9 is not a lucky numberBelow are the approaches to check for lucky
2 min read
PHP Program to Count Digits of a Number
In this article, we will see how to count the digits of a number in PHP. There are three methods to count digits of a number, these are: Table of Content Using strlen() FunctionUsing while LoopUsing str_split() FunctionUsing strlen() FunctionThe strlen() function returns the length of a given string
2 min read
PHP Program to Convert Integer to Roman Number
Converting an integer to a Roman number is a common problem often encountered in applications dealing with dates, historical data, and numeral representations. In this article, we will explore various approaches to converting an integer to Roman numerals in PHP. Table of Content Using Simple Mapping
2 min read
PHP Program to Convert a Given Number to Words
Given an integer N, the task is to convert the given number into words using PHP. Examples: Input: N = 438237764Output: Four Hundred Thirty Eight Million Two Hundred Thirty Seven Thousand Seven Hundred Sixty FourInput: N = 1000Output: One ThousandBelow are the approaches to convert a given number to
3 min read
PHP Program to Calculate Combination nCr
This article will show you how to Calculate the Combination nCr in PHP. Combinations refer to the different ways in which a set of items can be selected without considering the order. In mathematics, the number of combinations of 'n' distinct items taken 'r' at a time is denoted as nCr. The formula
2 min read
PHP Program to Add Two Numbers
Given two numbers, the task is to add two numbers in PHP. It is one of the most basic arithmetic operations and a fundamental concept in programming. Examples: Input: num1 = 10, num2 = 20Output: sum = 30Input: num1 = 70, num2 = 120Output: sum = 190Table of Content Using + operatorUsing Arrays and Ar
3 min read
PHP Program to Add Two Binary Numbers
Given Two binary numbers, the task is to add two binary numbers in PHP. Examples: Input: num1 = '1001', num2 = '1010'Output: 10011Input: num1 = '1011', num2 = '1101'Output: 11000There are two methods to add to binary numbers, these are: Table of Content Using bindec() and decbin() FunctionsUsing bas
1 min read
PHP Program to Reverse Bit of a Number
Given a number N, the task is to Reverse the Bit of the number and convert back into a decimal number in PHP. Examples: Input: N = 11Output: 13Explanations: (11)10 = (1011)2 After revering the Bits (1101)2 = (13)10Approach 1: Reverse Bit of a Number using Bitwise Shift OperatorsIn this approach, we
2 min read