📜  使用递归生成所有可能的子序列

📅  最后修改于: 2021-04-26 05:53:33             🧑  作者: Mango

给定一个数组。任务是使用递归生成并打印给定数组的所有可能的子序列。
例子:

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]

方法:对于数组中的每个元素,都有两种选择,要么将其包含在子序列中,要么不包含它。从索引0开始将其应用于数组中的每个元素,直到到达最后一个索引。到达最后一个索引后,打印子序列。
下图显示了数组arr [] = {1,2}的递归树。

下面是上述方法的实现。

C++
// C++ code to print all possible
// subsequences for given array using
// recursion
#include 
using namespace std;
  
void printArray(vector arr, int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}
  
// Recursive function to print all
// possible subsequences for given array
void printSubsequences(vector arr, int index, 
                       vector subarr)
{
    // Print the subsequence when reach
    // the leaf of recursion tree
    if (index == arr.size())
    {
        int l = subarr.size();
  
        // Condition to avoid printing
        // empty subsequence
        if (l != 0)
            printArray(subarr, l);
    }
    else
    {
        // Subsequence without including
        // the element at current index
        printSubsequences(arr, index + 1, subarr);
  
        subarr.push_back(arr[index]);
  
        // Subsequence including the element
        // at current index
        printSubsequences(arr, index + 1, subarr);
    }
    return;
}
  
// Driver Code
int main()
{
    vector arr{1, 2, 3};
    vector b;
  
    printSubsequences(arr, 0, b);
  
    return 0;
}
  
// This code is contributed by
// sanjeev2552


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


输出:
[3]
[2]
[2, 3]
[1]
[1, 3]
[1, 2]
[1, 2, 3]

时间复杂度:

O(2^n)