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++
// C++ code to print all possible subarrays for given array // using recursion #include <bits/stdc++.h> 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; } // This code is contributed by Sania Kumari Gupta |
C
// C code to print all possible subarrays for given array // using recursion #include <stdio.h> // Recursive function to print all possible subarrays for // given array void printSubArrays( int arr[], int start, int end, int size) { // Stop if we have reached the end of the array if (end == size) return ; // Increment the end point and start from 0 else if (start > end) printSubArrays(arr, 0, end + 1, size); // Print the subarray and increment the starting point else { printf ( "[" ); for ( int i = start; i < end; i++) printf ( "%d, " , arr[i]); // cout << arr[i] << ", "; printf ( "%d]\n" , arr[end]); // cout << arr[end] << "]" << endl; printSubArrays(arr, start + 1, end, size); } return ; } int main() { int arr[] = { 1, 2, 3 }; int n = sizeof (arr) / sizeof (arr[0]); printSubArrays(arr, 0, 0, n); return 0; } // This code is contributed by Sania Kumari Gupta |
Java
// 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 ); } } // This code is contributed by Sania Kumari Gupta |
Python3
# 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 ) |
C#
// 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 |
PHP
<?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 ?> |
Javascript
<script> // Javascript 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 == 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 { document.write( "[" ); for ( var i = start; i < end; i++) { document.write( arr[i] + ", " ); } document.write(arr[end] + "]<br>" ); printSubArrays(arr, start + 1, end); } return ; } // Driver code var arr = [ 1, 2, 3 ]; printSubArrays(arr, 0, 0); // This code is contributed by rutvik_56 </script> |
[1] [1, 2] [2] [1, 2, 3] [2, 3] [3]
Time Complexity: O(2n)
Auxiliary Space: O(2n)