【发布时间】:2015-02-11 19:25:56
【问题描述】:
我试图让这个函数迭代。这似乎是可能的,但我目前找不到这样做的方法。那么甚至有可能证明这个函数不能以任何方式迭代吗?我所说的迭代的意思是根本不使用递归函数调用。
// 我喜欢这个新的auto 关键字。
void every_permutation(const std::vector<int>& v, std::vector<std::vector<int>>& vs) {
if (v.size() == 1) {
vs.push_back(v);
return;
}
for (auto i = v.begin(); i != v.end(); ++i) {
std::vector<int> v_2;
for (auto j = v.begin(); j != v.end(); ++j) {
if (j != i) {
v_2.push_back(*j);
}
}
std::vector<std::vector<int>> vs_2;
every_permutation(v_2, vs_2);
for (auto j = vs_2.begin(); j != vs_2.end(); ++j) {
j->push_back(*i);
}
vs.insert(vs.end(), vs_2.begin(), vs_2.end());
}
}
【问题讨论】:
-
理论上所有的递归算法都可以转化为带有栈的迭代算法。
-
算法的描述会很好。
标签: c++ loops recursion iteration