문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력
첫째 줄에 N!을 출력한다.
예제 입력 1
10
예제 출력 1
3628800
예제 입력 2
0
예제 출력 2
1
해결 아이디어
재귀를 사용하는 팩토리얼이다. 재귀(순환)은 호출된 호출 자신이 특정한 조건으로 자기 자신을 다시 호출하여 진행하는 형태이다. 코드가 간결해지는 장점이 있지만, 가독성이 보다 떨어지고, 메모리 내의 콜 스택이 쌓여서 필요한 경우(스택 오버플로우가 발생할 수 있다.)에만 잘 파악하여 사용할 필요가 있다.
N을 입력받고, 함수의 리턴형태인 func 함수를 호출하여 그 리턴값을 출력하도록 한다.
내부에서 n이 1보다 작지 않은경우 func(n - 1) * n 이 실행될때마다, return 대기열엔 * n * (n-1) * (n-2)... 가 쌓이면서 1보다 작아지면 return 1로 대기열에 있는 모든 곱셉 연산이 처리되고 리턴되어 값이 나온다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
int func(int n)
{
if (n < 1) return 1;
return func(n - 1) * n;
}
int main()
{
int N;
scanf("%d", &N);
printf("%d", func(N));
}
|
cs |
'algorithms (C++)' 카테고리의 다른 글
[C++] 백준 2738번 / 행렬 덧셈 (0) | 2022.11.07 |
---|---|
[C++] 백준 17478번 / 재귀함수가 뭔가요? (0) | 2022.08.20 |
[C++] 백준 10757번 / 큰 수 A+B (0) | 2022.07.24 |
[C++] 백준 9020번 / 골드바흐의 추측 (0) | 2022.07.24 |
[C++] 백준 4948번 / 베르트랑 공준 (0) | 2022.07.24 |