✏️기록하는 즐거움
article thumbnail

Link

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

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

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!