Generating subarrays using recursion

Given an array, generate all the possible subarrays of the given array using recursion.

Examples:

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

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

We have discussed iterative program to generate all subarrays. In this post, recursive is discussed.

Approach: We use two pointers start and end to maintain the starting and ending point of the array and follow the steps given below:

  • Stop if we have reached the end of the array
  • Increment the end index if start has become greater than end
  • Print the subarray from index start to end and increment the starting index

Below is the implementation of the above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ code to print all possible subarrays  
// for given array using recursion 
  
#include <iostream>
# include <vector>
using namespace std;
  
// Recursive function to print all possible subarrays  
// for given array 
void printSubArrays(vector<int> arr, int start, int end)
{      
    // Stop if we have reached the end of the array     
    if (end == arr.size()) 
        return;
        
    // Increment the end point and start from 0 
    else if (start > end) 
        printSubArrays(arr, 0, end + 1);
            
    // Print the subarray and increment the starting point 
    else
    {
        cout << "[";
        for (int i = start; i < end; i++){
            cout << arr[i] << ", ";
        }
          
        cout << arr[end] << "]" << endl;
        printSubArrays(arr, start + 1, end);
    }
      
    return;
}
  
int main()
{
   vector<int> arr = {1, 2, 3};
   printSubArrays(arr, 0, 0);
   return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to print all possible subarrays 
// for given array using recursion 
  
class solution
{
  
// Recursive function to print all possible subarrays 
// for given array 
static void printSubArrays(int []arr, int start, int end)
{     
    // Stop if we have reached the end of the array     
    if (end == arr.length) 
        return;
      
    // Increment the end point and start from 0 
    else if (start > end) 
        printSubArrays(arr, 0, end + 1);
          
    // Print the subarray and increment the starting point 
    else
    {
        System.out.print("[");
        for (int i = start; i < end; i++){
            System.out.print(arr[i]+", ");
        }
          
        System.out.println(arr[end]+"]");
        printSubArrays(arr, start + 1, end);
    }
      
    return;
}
  
public static void main(String args[])
{
int []arr = {1, 2, 3};
printSubArrays(arr, 0, 0);
  
}
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 code to print all possible subarrays 
# for given array using recursion
  
# Recursive function to print all possible subarrays 
# for given array
def printSubArrays(arr, start, end):
      
    # Stop if we have reached the end of the array    
    if end == len(arr):
        return
      
    # Increment the end point and start from 0
    elif start > end:
        return printSubArrays(arr, 0, end + 1)
          
    # Print the subarray and increment the starting
    # point
    else:
        print(arr[start:end + 1])
        return printSubArrays(arr, start + 1, end)
          
# Driver code
arr = [1, 2, 3]
printSubArrays(arr, 0, 0)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to print all possible subarrays 
// for given array using recursion 
using System;
  
class GFG 
  
    // Recursive function to print all  
    // possible subarrays for given array 
    static void printSubArrays(int []arr, 
                        int start, int end) 
    
        // Stop if we have reached 
        // the end of the array 
        if (end == arr.Length) 
            return
  
        // Increment the end point 
        // and start from 0 
        else if (start > end) 
            printSubArrays(arr, 0, end + 1); 
  
        // Print the subarray and 
        // increment the starting point 
        else
        
            Console.Write("["); 
            for (int i = start; i < end; i++)
            
                Console.Write(arr[i]+", "); 
            
  
            Console.WriteLine(arr[end]+"]"); 
            printSubArrays(arr, start + 1, end); 
        
        return
    
  
    // Driver code
    public static void Main(String []args) 
    
        int []arr = {1, 2, 3}; 
        printSubArrays(arr, 0, 0); 
    
  
// This code is contributed by Rajput-Ji

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP code to print all possible 
// subarrays for given array using recursion
  
// Recursive function to print all 
// possible subarrays for given array
function printSubArrays($arr, $start, $end)
    // Stop if we have reached 
    // the end of the array 
    if ($end == count($arr))
        return;
      
    // Increment the end point 
    // and start from 0
    else if ($start > $end)
        return printSubArrays($arr, 0, 
                              $end + 1);
          
    // Print the subarray and increment 
    // the starting point
    else
    {
    echo "[";
    for($i = $start; $i < $end + 1; $i++)
    {
        echo $arr[$i];
        if($i != $end)
        echo ", ";
    }
    echo "]\n";
        return printSubArrays($arr, $start + 1, 
                                    $end);
    }
  
// Driver code
$arr = array(1, 2, 3);
printSubArrays($arr, 0, 0);
  
// This code is contributed by mits
?>

chevron_right


Output:

[1]
[1, 2]
[2]
[1, 2, 3]
[2, 3]
[3]

Time Complexity: O(n^2)



My Personal Notes arrow_drop_up

I like solving puzzles

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.