Link
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력 > 첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력 > 첫째 줄에 N!을 출력한다.
| 예제 입력
10
| 예제 출력
3628800
제출
const input = Number(
(process.platform == "linux"
? require("fs").readFileSync("/dev/stdin").toString()
: `10`
).trim()
);
const N = input;
function factorial(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
console.log(factorial(N));
풀이과정
for문으로 풀어도 되지만, 재귀 함수를 연습하는 문제이다.
팩토리얼은 1부터 n까지의 곱으로 이루어져 있다.
따라서 n을 1씩 줄여가면서 팩토리얼 함수를 계속해서 호출하면 된다.
ex) n = 10,
10 * factorial(9)
10 * 9 * factorial(8)
10 * 9 * 8 * factorial(7)
....
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 * factorial(0)
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 * 1
개념
재귀함수
- 함수가 자신을 다시 호출하는 구조로 만들어진 함수이다.
- 재귀를 이용해 작성한 코드는 반복문을 사용해서 다시 작성할 수 있고, 반복문을 사용하면 메모리 사용이 절약된다.
- 하지만, 반복문을 사용해도 큰 차이가 없을 때가 있기 때문에 이럴 때는 재귀 함수를 사용하는 것이 코드도 짧아지고 이해도가 높아지며 유지 보수에도 좋다.
Comment
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 11721: 열 개씩 끊어 출력하기 (javascript) (0) | 2022.11.23 |
---|---|
[백준] 10953: A+B - 6 (javascript) (0) | 2022.11.23 |
[백준] 9020: 골드바흐의 추측 (javascript) (0) | 2022.07.07 |
[백준] 4948: 베르트랑 공준 (javascript) (0) | 2022.07.07 |
[백준] 1929: 소수 구하기 (javascript) (0) | 2022.07.07 |