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:

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 Programint main(){ int n = 4, k = 3; cout << zigzag(n, k) << endl; return 0;} |
Java
// JAVA Code For Entringer Numberimport 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 Programn = 4k = 3print(zigzag(n, k))# This code is contributed by# Smitha Dinesh Semwal |
C#
// C# Code For Entringer Numberusing 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 Programint main(){ int n = 4, k = 3; cout << zigzag(n, k) << endl; return 0;} |
Java
// JAVA Code For Entringer Numberimport 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 Programn = 4k = 3print(zigzag(n, k))# This code is contributed by# Prasad Kshirsagar |
C#
// C# Code For Entringer Numberusing 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

