我在将一个递归算法转换为迭代算法来显示给定整数集的所有排列时遇到了一些困难。
void getPermutationsR(int v[], int n, int i)
{
if (i == n)
{
//Display contents of v
}
else
{
for (int j=i; j<n; j++)
{
swap (v, i, j);
getPermutationsR(v, n, i+1);
swap (v, i, j);
}
}
}
这是我目前的尝试,完全错误,但我没有看到任何不使用本地迭代算法来纠正问题的方法。我的一半尝试让我“弹出”比“推入”更多(导致在尝试访问空堆栈中的元素时出错),另一半则更多地“推入”而不是“弹出”(无限循环)。
void getPermutationsI(int v[], int n, int i)
{
stack<int> iStack;
stack<int> jStack;
iStack.push(i);
jStack.push(i);
while(iStack.size() > 0)
{
if (iStack.top() == n)
{
jStack.pop();
iStack.pop();
//Display contents of v
}
else
{
for (int j = iStack.top(); j < n; j++)
{
//swap
//something to do with jStack
}
//swap
iStack.push(i+1);
}
}
}
n
时除了打印之外什么也没做。 - Vladprintf
输出被调用和哪里被调用的内容,我认为您会发现就逻辑/思想而言,两者完全等效。 - IVlad