백준 단계별로 풀어보기 [재귀] 팩토리얼
https://www.acmicpc.net/problem/10872
[풀이]
팩토리얼을 재귀로 푸는 방식이야 매우 단순하고, TMP로 짠 코드에 대해서만 잠깐 복습하겠다. C++에서는 타입에 값을 부여해서 그 타입들을 가지고 연산을 할 수 있는데, 타입은 반드시 컴파일 타임에 확정되어야 한다. 따라서 컴파일 타임에 생성되는 코드로 프로그래밍을 하는 것을 메타 프로그래밍이라고 한다. 템플릿 메타 프로그래밍(TMP)를 이용해서 재귀적 구조를 나타낼 수 있다. 이때 N=1인 베이스 케이스는 템플릿 특수화를 이용해 처리한다.
[코드]
-일반 함수
#include <iostream>
int fac(int n) {
if (n == 1) return 1;
else return n * fac(n - 1);
}
int main(void) {
int n;
std::cin >> n;
std::cout << fac(n);
return 0;
}
-TMP
#include <iostream>
template <int N>
struct factorial {
static const int result = N * factorial<N - 1>::result;
};
template <>
struct factorial<1> {
static const int result = 1;
};
int main(void) {
std::cout << factorial<6>::result;
return 0;
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[c++] 백준 4948 베르트랑 공준 (0) | 2021.07.11 |
---|---|
[c++] 백준 2581 소수 (0) | 2021.07.09 |
[c++] 백준 1712 손익분기점 (0) | 2021.07.09 |
[c++] 백준 2839 설탕 배달 (0) | 2021.07.07 |
[c++] 백준 2869 달팽이는 올라가고 싶다 (0) | 2021.07.06 |