본문 바로가기
dev/javascript

[javascript] 자바스크립트 팩토리얼 계산하기 (factorial)

by 최연탄 2022. 9. 29.
728x90
반응형

이 포스트에서는 재귀함수, while 루프, for 루프를 사용해 팩토리얼을 계산하는 방법을 설명하겠습니다.

팩토리얼 계산이란?

팩토리얼(factorial)이란 주어진 수 보다 작거나 같은 모든 양의 정수를 곱한 것 입니다. 기호는 "!"를 사용하며 팩토리얼 이라고 읽습니다.

예를 들어 5 팩토리얼을 구한다면 다음과 같이 계산을 하면 됩니다.

5! = 5 * 4 * 3 * 2 * 1

재귀함수로 팩토리얼 구하기

재귀함수는 함수 내에서 자기 자신을 다시 호출하는 함수를 말합니다. 특정한 조건에 만족할 때 까지 자기 자신을 계속 호출하여 결과를 얻어내는 방법 입니다.

function factorial(num) {
  if (num < 0)
    return -1;
  else if (num == 0)
    return 1;
  else {
    return (num * factorial(num - 1));
  }
}

factorial(5);

위의 예제에서 매개변수로 받은 num이 음수이면 -1을 리턴하고 함수를 종료하게 됩니다. 만약 num이 0 이라면 1 팩토리얼 까지 계산한 것으로 간주합니다. 일종의 종료조건 입니다. 여기서 주목할 것은 마지막 else 부분입니다. 여기서는 주어진 num에 num 보다 1이 작은 숫자를 곱해야 하는데 자기 자신을 다시 호출하여 계산을 하게 됩니다.

이 함수가 계산하는 순서를 나열해 보면 (5 x (4 x (3 x (2 x (1 x 1))))) 이런 순서로 계산하게 됩니다.

while 루프로 팩토리얼 구하기

while 루프는 자바스크립트에서 반복문으로서 사용됩니다.

function factorial(num) {
  var result = num;

  if (num === 0 || num === 1)
    return 1;

  while (num > 1) {
    num--;
    result *= num;
  }

  return result;
}

factorial(5);

while 문에서 num이 1 보다 큰 동안 num을 하나씩 감소시키면서 result에 계속 곱하는 전형적인 방법을 사용했습니다.

for 루프로 팩토리얼 구하기

for 루프도 while 문과 비슷하게 구문을 반복할 수 있게하는 반복문입니다.

function factorial(num) {
  if (num === 0 || num === 1)
    return 1;

  for (var i = num - 1; i >= 1; i--) {
    num *= i;
  }

  return num;
}

factorial(5);

이번 예제에서 계산하는 방법은 while 문과 비슷하게 주어진 숫자에 하나씩 뺀 값을 곱하는 방법을 사용했습니다. 문법의 사용 방법만 다를 뿐 while 루프와 for 루프의 계산 방법은 동일합니다.

반응형

댓글