Entringer Number

The Entringer Number E(n, k) are the number of permutations of {1, 2, …, n + 1}, starting with k + 1, which, after initally 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++

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


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

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


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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.


Improved By : vt_m, Prasad_Kshirsagar




Recommended Posts:



3.2 Average Difficulty : 3.2/5.0
Based on 5 vote(s)






User Actions