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

Approach :
The (n+1)th Zigzag number is :
 a(n+1) = \dfrac{\sum_{k=0}^{n} (\binom{N}{k}*a(k)*a(n-k))}{2} \\
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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find zigzag sequence
#include <bits/stdc++.h>
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[0] = 1;
    for (int i = 1; i <= n; i++)
        fact[i] = fact[i - 1] * i;
  
    // Set first two zig zag numbers
    zig[0] = 1;
    zig[1] = 1;
  
    cout << "zig zag numbers: ";
  
    // Print first two zig zag number
    cout << zig[0] << " " << zig[1] << " ";
  
    // 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[0] = 1;
    for (int i = 1; i <= n; i++)
        fact[i] = fact[i - 1] * i;
  
    // Set first two zig zag numbers
    zig[0] = 1;
    zig[1] = 1;
  
    System.out.print("zig zag numbers: ");
  
    // Print first two zig zag number
    System.out.print(zig[0] + " " + zig[1] + " ");
  
    // 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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[0] = 1
    for i in range(1, n + 1):
        fact[i] = fact[i - 1] * i
  
    # Set first two zig zag numbers
    zig[0] = 1
    zig[1] = 1
  
    print("zig zag numbers: ", end = " ")
  
    # Print first two zig zag number
    print(zig[0], zig[1], 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
  
        # Prthe number
        print(sum // 2, end = " ")
  
# Driver code
n = 10
  
# Function call
ZigZag(n)
  
# This code is contributed by Mohit Kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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[0] = 1;
    for (int i = 1; i <= n; i++)
        fact[i] = fact[i - 1] * i;
  
    // Set first two zig zag numbers
    zig[0] = 1;
    zig[1] = 1;
  
    Console.Write("zig zag numbers: ");
  
    // Print first two zig zag number
    Console.Write(zig[0] + " " + zig[1] + " ");
  
    // 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

chevron_right


Output:

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

Reference
https://en.wikipedia.org/wiki/Alternating_permutation
https://oeis.org/A000111



My Personal Notes arrow_drop_up

Second year Department of Information Technology Jadavpur University

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.