如何以递归形式如何实现下述代码功能

如何将以下代码以递归形式实现,并且展示以下递归算法的逻辑和意义

#include 
#include 
using namespace std;
 
vectorint>>> records;
vectorint>> len_records;
vector<int> datas = { 1,2,3,4,5 };
int len = 0;
 
 
int main()
{
    len = 1;
    for (int i = 0;i < datas.size();i++)
    {
        vector<int> temp;temp.push_back(datas[i]);
        len_records.push_back(temp);
    }
    records.push_back(len_records);
    len_records.clear();
 
 
    len = 2;
    for (int i = 0;i < datas.size();i++)
    {
        for (int j = i+1;j < datas.size();j++)
        {
            vector<int> temp;temp.push_back(datas[i]), temp.push_back(datas[j]), len_records.push_back(temp);
        }
    }
    records.push_back(len_records);
    len_records.clear();
 
 
    len = 3;
    for (int i = 0;i < datas.size();i++)
    {
        for (int j = i + 1;j < datas.size();j++)
        {
            for (int k = j + 1;k < datas.size();k++)
            {
                vector<int> temp;temp.push_back(datas[i]), temp.push_back(datas[j]), temp.push_back(datas[k]);len_records.push_back(temp);
            }
        }
    }
    records.push_back(len_records);
    len_records.clear();
 
 
    len = 4;
    for (int i = 0;i < datas.size();i++)
    {
        for (int j = i + 1;j < datas.size();j++)
        {
            for (int k = j + 1;k < datas.size();k++)
            {
                for (int l = k + 1;l < datas.size();l++)
                {
                    vector<int> temp;temp.push_back(datas[i]), temp.push_back(datas[j]), temp.push_back(datas[k]), temp.push_back(datas[l]);len_records.push_back(temp);
                }
            }
        }
    }
    records.push_back(len_records);
    len_records.clear();
 
 
    len = 5;
    for (int i = 0;i < datas.size();i++)
    {
        for (int j = i + 1;j < datas.size();j++)
        {
            for (int k = j + 1;k < datas.size();k++)
            {
                for (int l = k + 1;l < datas.size();l++)
                {
                    for(int q=l+1;q();q++)
                    {
                        vector<int> temp;temp.push_back(datas[i]), temp.push_back(datas[j]), temp.push_back(datas[k]), temp.push_back(datas[l]), temp.push_back(datas[q]);len_records.push_back(temp);
                    }
                }
            }
        }
    }
    records.push_back(len_records);
    len_records.clear();
 
    for (int i = 0;i < records.size();i++)
    {
        for (int j = 0;j < records[i].size();j++)
        {
            for (int k = 0;k < records[i][j].size();k++)
            {
                cout << records[i][j][k] << ",";
            }
            cout << " ";
        }
        cout << endl;
    }
 
    system("pause");
 
    return 0;
}
 
 
 

#include <iostream>
#include <vector>
using namespace std;

vector<vector<vector<int>>> records;
vector<vector<int>> len_records;
vector<int> datas = { 1,2,3,4,5 };
int len = 0;
void func(int pos,int n,vector<int>& nums) {
    if(n==0)
    {
        len_records.push_back(nums);
        return;
    }
    for(int i=pos;i<datas.size();i++){
        nums.push_back(datas[i]);
        func(i+1,n-1,nums);
        nums.pop_back();
        
    }
}

int main()
{
    vector<int> tmp;
    for (int i = 1; i <= datas.size(); i++) {
        func(0,i,tmp);
    }
    for(auto& v: len_records){
        for(auto& n:v)
            cout<<n<<" ";
        cout<<endl;
        }
    return 0;
}






#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
 
using namespace std;
 
typedef long long LL;
 
const LL INF = 1e15; 
 
char op[3];
LL res = INF;
 
void dfs(vector<LL> v, int u)  //u表示当前第操作的字符
{
    //结束条件
    if(v.size() == 1)//u>=3
    {
        res = min(res, v[0]);
        return ;
    }
    
    //循环
    for(int i = 0; i < v.size(); i ++ )
    {
        for(int j = i + 1; j < v.size(); j ++ )//不需要从0开始就能查找所有情况
        {
            vector<LL> t;
            if(op[u] == '+')    t.push_back(v[i] + v[j]);
            else    t.push_back(v[i] * v[j]);
            for(int k = 0; k < v.size(); k ++ )
                if(k != i && k != j)    t.push_back(v[k]);
            dfs(t, u + 1);
        }
        //无需回溯
    }
}
 
int main()
{
    vector<LL> v(4);
    for(int i = 0; i < 4; i ++ )    cin >> v[i];
    for(int i = 0; i < 3; i ++ )    cin >> op[i];
    
    dfs(v, 0);
    
    cout << res << endl;
    
    return 0;
}