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