인프런 커뮤니티 질문&답변
요약본 질문
작성
·
195
0
안녕하세요! 여기다가 질문을 적어도 되는지 모르겠는데, 혹시 몰라 적어보겠습니다. 현재 요약본을 보면서 공부를 하고 있는데, 재귀함수가 너무 어려워 작은 해설을 부탁드리고 싶습니다
#include <cstdio>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int a[3] = {1, 2, 3};
vector<int> v;
void printV(vector<int> &v){
for(int i = 0; i < v.size(); i++){
cout << v[i] << " ";
}
cout << "\n";
}
void makePermutation(int n, int r, int depth){
cout << "depth : " << depth << '\n';
if(r == depth) {
printV(v);
return;
}
cout << "depth = " << depth << '\n';
for(int i = depth; i < n; i++) {
swap(v[i], v[depth]);
makePermutation(n, r, depth + 1);
swap(v[i], v[depth]);
}
return;
}
int main(){
for(int i = 0; i < 3; i++) v.push_back(a[i]);
makePermutation(3, 3, 0);
return 0;
}
결과
depth : 0
depth = 0
depth : 1
depth = 1
depth : 2
depth = 2
depth : 3
1 2 3 <= 여기까지는 이해가 갑니다만
depth : 2 <= 이 값이 어째서 3이 아닌 2로 줄어들었는지 궁금합니다
depth = 2
depth : 3
1 3 2
depth : 1
depth = 1
depth : 2
depth = 2
depth : 3
2 1 3
depth : 2
depth = 2
depth : 3
2 3 1
depth : 1
depth = 1
depth : 2
depth = 2
depth : 3
3 2 1
depth : 2
depth = 2
depth : 3
3 1 2
답변 1
1
큰돌
지식공유자
안녕하세요. ㅎㅎ
재귀함수가 이해가 안되신다는 말씀이시죠?
해당부분은 제가 이번주 내로 강의영상을 찍어서 올리도록 하겠습니다.
- 최대한 빨리 올리도록 할게요. ㅎ
올리고 나서 새소식에 업데이트 사항 올릴테니 그 때 봐주시면 됩니다.
감사합니다.
강사 큰돌 올림.





