c++的递归+回溯算法代码的逻辑描述

下面的递归+回溯算法代码的逻辑看不明白,麻烦详细说明一下逻辑,要求每行代码目标表达明确,最好同时使用文字描述一遍,感谢

#include 
#include 
using namespace std;

vector<int> datas = { 1,2,3,4,5 };
vectorint>> records;

void permutation(int position, int length, vector<int>& tmp)
{
    if (length == 0)
    {
        records.push_back(tmp);
        return;
    }
    for (int i = position;i < datas.size();i++)
    {
        tmp.push_back(datas[i]);
        permutation(i + 1, length - 1, tmp);
        tmp.pop_back();
    }
}

int main()
{
    vector<int> tmp;
    for (int i = 1;i < datas.size();i++)
    {
        permutation(0, i, tmp);
    }

    return 0;
}

单步调试
在算法函数这儿打断点,单步调试,观察每个变量值的变化情况,可以更深刻地理解代码逻辑。

5,6行:vector迭代用的容器,可以按不同方式遍历
8行的子程序:
第一个if:如果length的长度为0,把records压出栈后,直接结束;
15行的for:用tmp遍历datas后递归,然后把tmp弹出。
main函数里面循环执行递归程序即可。
如果不了解递归的原理,去网上查一下,很多的

你具体哪一句不懂? 不会连前三行代码都要说明吧?

这道题应该是枚举子序列的
vector可以理解为长度可变的数组
permutation有三个参数:position,表示枚举开始的位置(datas中的第几位),length,表示剩余需要枚举的位数,第三个传入一个vector,表示当前的结果
当剩余位数为0时(第10到14行),表示枚举结束,保存结果,返回上一级;
当剩余位数不为0时,从当前位置开始枚举剩下的数,放入tmp,进行下一层递归:开始位数+1,剩余位数-1,继续传入tmp
以此类推

单步调试
在主函数大一个端点,调试,然后下一步下一步,打开监视窗口,查看变量的变化,在函数的地方单步进入

应该不用那么麻烦吧!
例全排列:#include<bits/stdc++.h>
using namespace std;
int ans=0;
int a[11];
bool b[11];
int n;
void fun(int x)
{
if(x>n)
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!b[i])
{
b[i]=1;
a[x]=i;
fun(x+1);
b[i]=0;
}
}
}
int main()
{
cin>>n;
fun(1);
return 0;
}

for(int i=1;i<=n;i++)
{
if(!b[i])
{
b[i]=1;
a[x]=i;
fun(x+1);
b[i]=0;
}
}//这里应该就算递归回溯吧

具体题目有吗