https://www.acmicpc.net/problem/10872
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력
첫째 줄에 N!을 출력한다.
예제 입력1
10
예제 출력1
3628800
예제 입력2
0
예제 출력2
1
해결 방법
재귀 함수란?
재귀 함수란 어떤 함수 내부에서 다시 자기 자신을 부르는 함수를 의미하고 일정 종료 조건이 되면 호출이 멈춘다. 이러한 함수를 호출하면 스택(stack)이라는 자료구조에 쌓이게 된다. 스택은 LIFO(Last In First Out)의 구조이다. 따라서 먼저 호출한 것이 아래에 쌓이게 되고 가장 나중에 호출된 것이 가장 먼저 나가게 된다.
*팩토리얼은 1부터 시작하기 때문에 0도 1이라는 것을 주의해야 한다.
아래의 코드를 이용해서 재귀 함수의 과정을 살펴보면 input값이 3이라고 가정해보자.
위의 그림처럼 처음 factorial(3)이 호출되면 리턴 값은 3 * factorial(2)이다.
그럼 다음으로 factorial(2)가 호출되고 리턴값은 2 * factorial(1)이다.
다시 factorial(1)이 호출되고 리턴값은 1이다.
factorial(1)의 리턴값은 1이므로 factorial(2)의 리턴값은 2 * 1
최종적으로 factorial(3)의 리턴값은 3 * 2 * 1이 되는 것이다.
전체 코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();
function factorial(num){
if(num <= 1) return 1;
return num * factorial(num - 1);
}
console.log(factorial(input));
참고 사이트
'알고리즘 > 백준' 카테고리의 다른 글
[JavaScript] 백준 재귀 #17478번 재귀함수가 뭔가요? (0) | 2022.08.17 |
---|---|
[JavaScript] 백준 재귀 #10870번 피보나치 수 5 (0) | 2022.08.16 |
[JavaScript] 백준 기본수학2 #9020번 골드바흐의 추측 (0) | 2022.08.13 |
[JavaScript] 백준 기본수학 2 #4948번 베르트랑 공준 (0) | 2022.08.09 |
[JavaScript] 백준 기본수학2 #1929번 소수 구하기 (0) | 2022.07.25 |