반응형
https://www.acmicpc.net/problem/10872
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력
첫째 줄에 N!을 출력한다.
/*
https://www.acmicpc.net/problem/10872
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}else {
return n * factorial(n - 1);
}
}
int main() {
int N;
scanf("%d", &N);
printf("%d\n", factorial(N));
}
재귀함수인 factorial() 을 반복하여 원하는 return 값을 구할 수 있었습니다.
ex) factorial(3) 일 때
factorial(3) = 3 * factorial(2) * factorial(1)
= 3 * 2 * factorial(1)
= 3 * 2 * 1
주의해야할 점
1. n == 0 일 때 return 1로 탈출해야합니다. (무한루프 방지)
위의 무한루프 방지를 하지 않는다면
-> factorial(3) = 3 * factorial(2) * factorial(1) * factorial(0) * factorial(-1) * factorial(-2) * ~~~~~~
factorial(음수) 가 개념적으로 존재하지 않을 뿐 더러, 우변의 곱이 무한반복 되게 됩니다.
반응형
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준][C/C++] 9020번: 골드바흐의 추측 (0) | 2022.02.18 |
---|---|
[백준][C++] 10870 피보나치 수 5 (0) | 2022.01.31 |
[백준][c++] 11720번 하노이 탑 이동 순서 (0) | 2022.01.10 |
[백준][C] 2512번 예산 (0) | 2021.12.29 |
[백준][C] 2805번 나무자르기 (by 이진탐색) (0) | 2021.12.27 |