C++ 如何以非递归形式重写此函数?

C++ 如何以非递归形式重写此函数?,c++,recursion,C++,Recursion,如何以非递归形式重写此函数 void generate(int pos) { if (pos == n + 1) { print_table(); } else { for (int i = 1; i <= n; i++) { if (!used[i]) { used[i] = true; perm[pos] = i; generate(pos + 1);////recur

如何以非递归形式重写此函数

void generate(int pos)
{
  if (pos == n + 1)
  {
    print_table();
  }
  else 
  {
    for (int i = 1; i <= n; i++)
    {
      if (!used[i])
      {
        used[i] = true;
        perm[pos] = i;
        generate(pos + 1);////recursion
        used[i] = false;
      }
    }
  }
}
void生成(int pos)
{
如果(位置==n+1)
{
打印表格();
}
其他的
{

对于(int i=1;i您的代码似乎是一个标准的递归算法,用于生成元素列表的所有排列。而不是试图机械地将递归算法转换为迭代算法(可能需要某种类型的堆栈)您可能想看看迭代算法,列出列表中的所有排列。例如,C++提供了<代码> STD::NExtx置换< /C>算法,可以用来排列排列。作为参考,我有注释说明它是如何工作的。
希望这有帮助!

< p>对于每个数字1,…,n,这个代码似乎调用了<代码> PrimtTabLable()/>代码。C++中有一个内置工具,

#include <algorithm>

void generate() {
    int n = 10; // or whatever

    std::vector<int> perm(n);
    for(int i=0; i<n; i++) perm[i] = i+1;
    do {
        print_table(perm);
    } while(std::next_permutation(perm, perm+n));
}
#包括
void生成(){
int n=10;//或其他
std::向量perm(n);

对于(int i=0;i
n
来自何处?这有什么关系,@Vite?使用显式堆栈?顺便问一下,此函数在做什么?初始调用“generate”时传递的“pos”值也是required@RobKennedy:现在我想起来了,不是真的。操作:我现在已经修好了。这段代码中不应该使用
。谢谢!很好!一切正常大多数是有效的。但除此之外,您的函数会为我生成无用的结果。在我看来,std::next_置换算法中的这个问题请注意,值存储在
perm[0],…,perm[n-1]
中,而您可能希望它们存储在
perm[1],…,perm[n]中
。在C/C++中,从0开始索引数组是正常的。是的,可能是,因为我开始从1-undex记录单位。谢谢