반응형
https://www.acmicpc.net/problem/10872
10872번: 팩토리얼
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
문제
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(음수) 가 개념적으로 존재하지 않을 뿐 더러, 우변의 곱이 무한반복 되게 됩니다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준][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 |