티스토리 뷰
이전에 포스팅한 재귀 알고리즘을 이용한 부분 집합 생성 알고리즘과 유사한 방식이다.
아래는 n = 7 , r = 4 라고 가정하고 7C4의 경우를 모두 출력하는 코드이다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> comb;
int n = 7, r =4;
void combination(int k) {
if (comb.size() == r) {
for (int i = 0; i < comb.size(); i++)
cout << comb[i] << " "; cout << endl;
}
else if( k == n + 1 ){
}
else {
comb.push_back(k);
combination(k + 1);
comb.pop_back();
combination(k + 1);
}
}
int main() {
combination(1);
return 0;
}
실행 결과 :
짧은 코드로 쉽게 구현할 수 있지만, 재귀 함수를 이용하다보니 재귀 알고리즘에 익숙하지 않다면 한 눈에 동작을 이해하기 어려울 것 같다.
k에 인자 1을 넣고 함수를 실행하고 벡터 안에 r개의 원소가 다 차거나, k가 n보다 커지면 재귀 스택이 종료된다.
한번 직접 코드를 입력한 후에 n과 r을 낮은 값으로 넣고 직접 실행해보는 것을 추천한다.
'Programming Languages > C++ & Algorithm' 카테고리의 다른 글
C++ 자료형 확인, 자료형 크기 확인 (0) | 2020.10.06 |
---|---|
c++ cin, scanf 속도 차이 얼마나 날까? (0) | 2020.10.05 |
c++ 2차원 동적배열의 참조에 의한 호출 (0) | 2020.09.24 |
C++ 반복자 , lower_bound, sort, unique, erase... (0) | 2020.09.23 |
재귀 함수를 이용한 순열 생성 알고리즘 (0) | 2020.09.21 |
댓글