이 함수를 반복적으로 만들기 위해 조금 생각했습니다. 가능한 것처럼 보였지만 현재로서는 그렇게 할 수있는 방법을 찾을 수 없습니다. 그렇다면이 함수가 어떤 방식 으로든 반복 될 수 없다는 것을 증명할 수 있습니까? 반복에서 의미하는 것은 재귀 함수 호출을 전혀 사용하지 않는 것입니다.이 재귀 함수는 반복 할 수 없습니까?
//이 새로운 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());
}
}
이론적으로 모든 재귀 알고리즘은 스택을 사용하여 반복 알고리즘으로 변환 할 수 있습니다. –
알고리즘에 대한 설명이 유용 할 것입니다. –