我試着想一點,使這個函數迭代。這似乎是可能的,但我目前無法找到辦法。那麼甚至有可能證明這個函數不能以任何方式迭代?我的意思是迭代根本不使用遞歸函數調用。這個遞歸函數不可能迭代嗎?
//我喜歡這個新的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());
}
}
理論上講,所有的遞歸算法都可以轉化爲帶有堆棧的迭代算法。 – 2014-12-13 01:31:01
該算法的說明會很好。 – 2014-12-13 01:37:24