Friday, December 27, 2024
Google search engine
HomeData Modelling & AIGenerating all possible Subsequences using Recursion including the empty one.

Generating all possible Subsequences using Recursion including the empty one.

Given an array. The task is to generate and print all of the possible subsequences of the given array using recursion.

Examples: 

Input : [1, 2, 3]
Output : [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3], []

Input : [1, 2]
Output : [2], [1], [1, 2], []
 

Approach: For every element in the array, there are two choices, either to include it in the subsequence or not include it. Apply this for every element in the array starting from index 0 until we reach the last index. Print the subsequence once the last index is reached. 

Below diagram shows the recursion tree for array, arr[] = {1, 2}.  

Below is the implementation of the above approach. 

C++




// C++ code to print all possible
// subsequences for given array using
// recursion
#include <bits/stdc++.h>
using namespace std;
 
 
 
// Recursive function to print all
// possible subsequences for given array
void printSubsequences(int arr[], int index,
                       vector<int> &subarr,int n)
{
    // Print the subsequence when reach
    // the leaf of recursion tree
    if (index == n)
    {
         for (auto it:subarr){
           cout << it << " ";
          
         }
      if(subarr.size()==0)
        cout<<"{}";
       
      cout<<endl;
      return;
 
         
    }
    else
    {
       //pick the current index into the subsequence.
        subarr.push_back(arr[index]);
       
 
         printSubsequences(arr, index + 1, subarr,n);
 
         
        subarr.pop_back();
       
      //not picking the element into the subsequence.
        printSubsequences(arr, index + 1, subarr,n);
    }
    
}
 
// Driver Code
int main()
{
    int arr[]={1, 2, 3};
    int n=sizeof(arr)/sizeof(arr[0]);
    vector<int> vec;
      
 
    printSubsequences(arr, 0, vec,n);
 
    return 0;
}
 
// This code is contributed by
// vivekr4400


Java




// Java code to print all possible
// subsequences for given array using
// recursion
import java.io.*;
import java.util.*;
 
class GFG{
       
// Recursive function to print all
// possible subsequences for given array
public static void printSubsequences(int[] arr, int index,
                                     ArrayList<Integer> path)
{
     
    // Print the subsequence when reach
    // the leaf of recursion tree
    if (index == arr.length)
    {
         
        // Condition to avoid printing
        // empty subsequence
        if (path.size() > 0)
            System.out.println(path);
    }
     
    else
    {
         
        // Subsequence without including
        // the element at current index
        printSubsequences(arr, index + 1, path);
         
        path.add(arr[index]);
         
        // Subsequence including the element
        // at current index
        printSubsequences(arr, index + 1, path);
         
        // Backtrack to remove the recently
        // inserted element
        path.remove(path.size() - 1);
    }
    return;
}
 
// Driver code
public static void main(String[] args)
{
    int[] arr = { 1, 2, 3 };
       
      // Auxiliary space to store each path
      ArrayList<Integer> path = new ArrayList<>();
       
      printSubsequences(arr, 0, path);
}
}
 
// This code is contributed by Mukul Sharma


Python3




# Python3 code to print all possible 
# subsequences for given array using 
# recursion
   
# Recursive function to print all
# possible subsequences for given array
def printSubsequences(arr, index, subarr):
       
    # Print the subsequence when reach 
    # the leaf of recursion tree
    if index == len(arr):
           
        # Condition to avoid printing
        # empty subsequence
        if len(subarr) != 0:
            print(subarr)
       
    else:
        # Subsequence without including 
        # the element at current index
        printSubsequences(arr, index + 1, subarr)
           
        # Subsequence including the element
        # at current index
        printSubsequences(arr, index + 1
                            subarr+[arr[index]])
       
    return
           
arr = [1, 2, 3]
   
printSubsequences(arr, 0, [])
 
#This code is contributed by Mayank Tyagi


C#




// C# code to print all possible
// subsequences for given array using
// recursion
using System;
using System.Collections.Generic;
class GFG {
     
    // Recursive function to print all
    // possible subsequences for given array
    static void printSubsequences(int[] arr, int index, List<int> path)
    {
          
        // Print the subsequence when reach
        // the leaf of recursion tree
        if (index == arr.Length)
        {
              
            // Condition to avoid printing
            // empty subsequence
            if (path.Count > 0)
            {
                Console.Write("[");
                for(int i = 0; i < path.Count - 1; i++)
                {
                    Console.Write(path[i] + ", ");
                }
                Console.WriteLine(path[path.Count - 1] + "]");
            }
        }
          
        else
        {
              
            // Subsequence without including
            // the element at current index
            printSubsequences(arr, index + 1, path);
              
            path.Add(arr[index]);
              
            // Subsequence including the element
            // at current index
            printSubsequences(arr, index + 1, path);
              
            // Backtrack to remove the recently
            // inserted element
            path.RemoveAt(path.Count - 1);
        }
        return;
    }
 
  static void Main() {
      int[] arr = { 1, 2, 3 };
        
      // Auxiliary space to store each path
      List<int> path = new List<int>();
        
      printSubsequences(arr, 0, path);
  }
}
 
// This code is contributed by rameshtravel07.


Javascript




<script>
// Javascript code to print all possible
// subsequences for given array using
// recursion
 
// Recursive function to print all
// possible subsequences for given array
function printSubsequences(arr, index, path)
{
 
  // Print the subsequence when reach
  // the leaf of recursion tree
  if (index == arr.length)
  {
   
    // Condition to avoid printing
    // empty subsequence
    if (path.length > 0) document.write(`[${path}]<br>`);
  }
  else
  {
   
    // Subsequence without including
    // the element at current index
    printSubsequences(arr, index + 1, path);
 
    path.push(arr[index]);
 
    // Subsequence including the element
    // at current index
    printSubsequences(arr, index + 1, path);
 
    // Backtrack to remove the recently
    // inserted element
    path.pop();
  }
  return;
}
 
// Driver code
let arr = [1, 2, 3];
 
// Auxiliary space to store each path
let path = new Array();
 
printSubsequences(arr, 0, path);
 
// This code is contributed by gfgking
</script>


output

1 2 3  

1 2  

1 3  

1  

2 3  

2  

3  

{}

Time Complexity: 
O(2^n)

Space Complexity: 
O(n) , Because of the recursion stack.
 
 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments