# Euler zigzag numbers ( Alternating Permutation )

Euler Zigzag numbers is a sequence of integers which is a number of arrangements of those numbers so that each entry is alternately greater or less than the preceding entry.

c1, c2, c3, c4 is Alternating permutation where
c1 < c2
c3 < c2
c3 < c4…

zigzag numbers are as follows 1, 1, 1, 2, 5, 16, 61, 272, 1385, 7936, 50521 ……

For a given integer N. The task is to print sequence up to N terms.

Examples:

Input : N = 10
Output : 1 1 1 2 5 16 61 272 1385 7936

Input : N = 14
Output : 1 1 1 2 5 16 61 272 1385 7936 50521 353792 2702765 22368256

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :
The (n+1)th Zigzag number is : We will find the factorial upto n and store them in an array and also create a second array to store the i th zigzag number and apply the formula stated above to find all the n zigzag numbers.

Below is the implementation of the above approach :

## C++

 // CPP program to find zigzag sequence  #include  using namespace std;     // Function to print first n zigzag numbers  void ZigZag(int n)  {      // To store factorial and n'th zig zag number      long long fact[n + 1], zig[n + 1] = { 0 };         // Initilize factorial upto n      fact = 1;      for (int i = 1; i <= n; i++)          fact[i] = fact[i - 1] * i;         // Set first two zig zag numbers      zig = 1;      zig = 1;         cout << "zig zag numbers: ";         // Print first two zig zag number      cout << zig << " " << zig << " ";         // Print the rest zig zag numbers      for (int i = 2; i < n; i++)       {          long long sum = 0;             for (int k = 0; k <= i - 1; k++)           {              // Binomial(n, k)*a(k)*a(n-k)              sum += (fact[i - 1]/(fact[i - 1 - k]*fact[k]))                                    *zig[k] * zig[i - 1 - k];          }                     // Store the value          zig[i] = sum / 2;             // Print the number          cout << sum / 2 << " ";      }  }     // Driver code  int main()  {      int n = 10;             // Function call      ZigZag(n);         return 0;  }

## Java

 // Java program to find zigzag sequence  import java.util.*;  import java.lang.*;  import java.io.*;     class GFG  {     // Function to print first n zigzag numbers  static void ZigZag(int n)  {      // To store factorial and n'th zig zag number      long[] fact= new long[n + 1];      long[] zig = new long[n + 1];      for (int i = 0; i < n + 1; i++)          zig[i] = 0;         // Initilize factorial upto n      fact = 1;      for (int i = 1; i <= n; i++)          fact[i] = fact[i - 1] * i;         // Set first two zig zag numbers      zig = 1;      zig = 1;         System.out.print("zig zag numbers: ");         // Print first two zig zag number      System.out.print(zig + " " + zig + " ");         // Print the rest zig zag numbers      for (int i = 2; i < n; i++)       {          long sum = 0;             for (int k = 0; k <= i - 1; k++)           {              // Binomial(n, k)*a(k)*a(n-k)              sum += (fact[i - 1] / (fact[i - 1 - k] *                       fact[k])) * zig[k] * zig[i - 1 - k];          }                     // Store the value          zig[i] = sum / 2;             // Print the number          System.out.print(sum / 2 + " " );                 }  }     // Driver code  public static void main (String[] args)                 throws java.lang.Exception  {      int n = 10;             // Function call      ZigZag(n);  }  }     // This code is contributed by nidhiva

## Python3

 # Python3 program to find zigzag sequence     # Function to prfirst n zigzag numbers  def ZigZag(n):         # To store factorial and       # n'th zig zag number      fact = [0 for i in range(n + 1)]      zig = [0 for i in range(n + 1)]          # Initilize factorial upto n      fact = 1     for i in range(1, n + 1):          fact[i] = fact[i - 1] * i         # Set first two zig zag numbers      zig = 1     zig = 1        print("zig zag numbers: ", end = " ")         # Print first two zig zag number      print(zig, zig, end = " ")         # Print the rest zig zag numbers      for i in range(2, n):          sum = 0            for k in range(0, i):                             # Binomial(n, k)*a(k)*a(n-k)              sum += ((fact[i - 1] //                      (fact[i - 1 - k] * fact[k])) *                       zig[k] * zig[i - 1 - k])             # Store the value          zig[i] = sum // 2            # Print the number          print(sum // 2, end = " ")     # Driver code  n = 10    # Function call  ZigZag(n)     # This code is contributed by Mohit Kumar

## C#

 // C# program to find zigzag sequence  using System;         class GFG  {     // Function to print first n zigzag numbers  static void ZigZag(int n)  {      // To store factorial and n'th zig zag number      long[] fact= new long[n + 1];      long[] zig = new long[n + 1];      for (int i = 0; i < n + 1; i++)          zig[i] = 0;         // Initilize factorial upto n      fact = 1;      for (int i = 1; i <= n; i++)          fact[i] = fact[i - 1] * i;         // Set first two zig zag numbers      zig = 1;      zig = 1;         Console.Write("zig zag numbers: ");         // Print first two zig zag number      Console.Write(zig + " " + zig + " ");         // Print the rest zig zag numbers      for (int i = 2; i < n; i++)       {          long sum = 0;             for (int k = 0; k <= i - 1; k++)           {              // Binomial(n, k)*a(k)*a(n-k)              sum += (fact[i - 1] / (fact[i - 1 - k] *                       fact[k])) * zig[k] * zig[i - 1 - k];          }                     // Store the value          zig[i] = sum / 2;             // Print the number          Console.Write(sum / 2 + " " );                 }  }     // Driver code  public static void Main (String[] args)  {      int n = 10;             // Function call      ZigZag(n);  }  }     // This code is contributed by 29AjayKumar

Output:

zig zag numbers: 1 1 1 2 5 16 61 272 1385 7936


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.

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.