Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Entringer Number

  • Difficulty Level : Medium
  • Last Updated : 05 May, 2021

The Entringer Number E(n, k) are the number of permutations of {1, 2, …, n + 1}, starting with k + 1, which, after initially falling, alternatively fall then rise. The Entringer are given by: 
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

For example, for n = 4 and k = 2, E(4, 2) is 4. 
They are: 
3 2 4 1 5 
3 2 5 1 4 
3 1 4 2 5 
3 1 5 2 4
Examples : 
 



Input : n = 4, k = 2
Output : 4

Input : n = 4, k = 3
Output : 5

 

Below is program to find Entringer Number E(n, k). The program is based on above simple recursive formula. 
 

C++




// CPP Program to find Entringer Number E(n, k)
#include <bits/stdc++.h>
using namespace std;
 
// Return Entringer Number E(n, k)
int zigzag(int n, int k)
{
    // Base Case
    if (n == 0 && k == 0)
        return 1;
 
    // Base Case
    if (k == 0)
        return 0;
 
    // Recursive step
    return zigzag(n, k - 1) +
           zigzag(n - 1, n - k);
}
 
// Driven Program
int main()
{
    int n = 4, k = 3;
    cout << zigzag(n, k) << endl;
    return 0;
}

Java




// JAVA Code For Entringer Number
import java.util.*;
 
class GFG {
     
    // Return Entringer Number E(n, k)
    static int zigzag(int n, int k)
    {
        // Base Case
        if (n == 0 && k == 0)
            return 1;
      
        // Base Case
        if (k == 0)
            return 0;
      
        // Recursive step
        return zigzag(n, k - 1) +
               zigzag(n - 1, n - k);
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int n = 4, k = 3;
        System.out.println(zigzag(n, k));
         
    }
}
 
// This code is contributed by Arnav Kr. Mandal.

Python3




# Python Program to find Entringer Number E(n, k)
 
# Return Entringer Number E(n, k)
def zigzag(n, k):
 
    # Base Case
    if (n == 0 and k == 0):
        return 1
 
    # Base Case
    if (k == 0):
        return 0
 
    # Recursive step
    return zigzag(n, k - 1) + zigzag(n - 1, n - k);
 
# Driven Program
n = 4
k = 3
print(zigzag(n, k))
 
# This code is contributed by
# Smitha Dinesh Semwal   

C#




// C# Code For Entringer Number
using System;
 
class GFG {
 
    // Return Entringer Number E(n, k)
    static int zigzag(int n, int k)
    {
        // Base Case
        if (n == 0 && k == 0)
            return 1;
 
        // Base Case
        if (k == 0)
            return 0;
 
        // Recursive step
        return zigzag(n, k - 1) +
               zigzag(n - 1, n - k);
    }
 
    /* Driver program to test above function */
    public static void Main()
    {
        int n = 4, k = 3;
        Console.WriteLine(zigzag(n, k));
    }
}
 
// This code is contributed by vt_m.

PHP




<?php
// PHP Program to find
// Entringer Number E(n, k)
 
// Return Entringer Number E(n, k)
function zigzag($n, $k)
{
    // Base Case
    if ($n == 0 and $k == 0)
        return 1;
 
    // Base Case
    if ($k == 0)
        return 0;
 
    // Recursive step
    return zigzag($n, $k - 1) +
        zigzag($n - 1,$n - $k);
}
 
// Driven Code
$n = 4; $k = 3;
echo zigzag($n, $k) ;
 
// This code is contributed by anuj_67.
?>

Javascript




<script>
//  Program to find Entringer Number E(n, k)
 
// Return Entringer Number E(n, k)
function zigzag( n, k)
{
    // Base Case
    if (n == 0 && k == 0)
        return 1;
  
    // Base Case
    if (k == 0)
        return 0;
  
    // Recursive step
    return zigzag(n, k - 1) +
           zigzag(n - 1, n - k);
}
  
// Driven Program
 
     n = 4;
     k = 3;
    document.write( zigzag(n, k));
//This code is contributed by sweetyty
</script>

Output : 
 

5

Below is the implementation of finding Entringer Number using Dynamic Programming: 
 

C++




// CPP Program to find Entringer Number E(n, k)
#include <bits/stdc++.h>
using namespace std;
 
// Return Entringer Number E(n, k)
int zigzag(int n, int k)
{
    int dp[n + 1][k + 1];
    memset(dp, 0, sizeof(dp));
 
    // Base cases
    dp[0][0] = 1;
    for (int i = 1; i <= n; i++)
        dp[i][0] = 0;   
 
    // Finding dp[i][j]
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++)
            dp[i][j] = dp[i][j - 1] +
                       dp[i - 1][i - j];
 
    return dp[n][k];
}
 
// Driven Program
int main()
{
    int n = 4, k = 3;
    cout << zigzag(n, k) << endl;
    return 0;
}

Java




// JAVA Code For Entringer Number
import java.util.*;
 
class GFG {
     
    // Return Entringer Number E(n, k)
    static int zigzag(int n, int k)
    {
        int dp[][] = new int[n + 1][k + 1];
        
        // Base cases
        dp[0][0] = 1;
        for (int i = 1; i <= n; i++)
            dp[i][0] = 0;   
      
        // Finding dp[i][j]
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= Math.min(i, k);
                                          j++)
                dp[i][j] = dp[i][j - 1] +
                           dp[i - 1][i - j];
            }
      
        return dp[n][k];
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int n = 4, k = 3;
        System.out.println(zigzag(n, k));
    }
}
     
// This code is contributed by Arnav Kr. Mandal.   

Python3




# Python3 Program to find Entringer
# Number E(n, k)
 
# Return Entringer Number E(n, k)
def zigzag(n, k):
    dp = [[0 for x in range(k+1)]
             for y in range(n+1)]
 
    # Base cases
    dp[0][0] = 1
    for i in range(1, n+1):
        dp[i][0] = 0
 
    # Finding dp[i][j]
    for i in range(1, n+1):
        for j in range(1, k+1):
            dp[i][j] = (dp[i][j - 1]
                 + dp[i - 1][i - j])
                         
    return dp[n][k]
 
# Driven Program
n = 4
k = 3
print(zigzag(n, k))
 
# This code is contributed by
# Prasad Kshirsagar

C#




// C# Code For Entringer Number
using System;
 
class GFG {
 
    // Return Entringer Number E(n, k)
    static int zigzag(int n, int k)
    {
        int[, ] dp = new int[n + 1, k + 1];
 
        // Base cases
        dp[0, 0] = 1;
        for (int i = 1; i <= n; i++)
            dp[i, 0] = 0;
 
        // Finding dp[i][j]
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= Math.Min(i, k);
                j++)
                dp[i, j] = dp[i, j - 1] + dp[i - 1, i - j];
        }
 
        return dp[n, k];
    }
 
    /* Driver program to test above function */
    public static void Main()
    {
        int n = 4, k = 3;
        Console.WriteLine(zigzag(n, k));
    }
}
 
// This code is contributed by vt_m.

PHP




<?php
// PHP Program to find
// Entringer Number E(n, k)
 
// Return Entringer Number E(n, k)
function zigzag($n, $k)
{
    $dp = array(array());
     
 
    // Base cases
    $dp[0][0] = 1;
    for ($i = 1; $i <= $n; $i++)
        $dp[$i][0] = 0;
 
    // Finding dp[i][j]
    for ($i = 1; $i <= $n; $i++)
    {
        for ($j = 1; $j <= $i; $j++)
            $dp[$i][$j] = $dp[$i][$j - 1] +
                          $dp[$i - 1][$i - $j];
    }
    return $dp[$n][$k];
}
 
// Driven Code
$n = 4; $k = 3;
echo zigzag($n, $k);
 
// This code is contributed by anuj_67.
?>

Javascript




<script>
 
// JavaScript program For Entringer Number
 
    // Return Entringer Number E(n, k)
    function zigzag(n, k)
    {
        let dp = new Array(n+1);
         
        // Loop to create 2D array using 1D array
        for (var i = 0; i < dp.length; i++) {
            dp[i] = new Array(2);
        }
          
        // Base cases
        dp[0][0] = 1;
        for (let i = 1; i <= n; i++)
            dp[i][0] = 0;   
        
        // Finding dp[i][j]
        for (let i = 1; i <= n; i++) {
            for (let j = 1; j <= Math.min(i, k);
                                          j++)
                dp[i][j] = dp[i][j - 1] +
                           dp[i - 1][i - j];
            }
        
        return dp[n][k];
    }
 
// Driver code
 
        let n = 4, k = 3;
        document.write(zigzag(n, k));
                             
</script>

Output : 

5

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :