Entringer Number

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:

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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    

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

5

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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

5


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.