재귀함수 - 팩토리얼

SeungMin·2022년 8월 21일
0

WECODE

목록 보기
11/19

재귀함수란?

재귀함수 : (再歸函數, Recursion) 정의 단계에서 자신을 재참조하는 함수를 뜻한다.


예시


const countdown = n => {
  console.log(n);
  countdown(n-1);
}

countdown(10);

위의 경우는 10 , 9 , 8 , 7 ... -Infinity 로 끝이 나지 않게된다.

재귀함수가 끝나는 시점을 미리 정해주지 않았기 때문이다.

const countdown = n => {
  console.log(n);

  if (n === 0) return;

  countdown(n-1);
}

countdown(10);

위의 경우는 인수 n으로 0이온다면 return하는 구문이 추가되어있다.

인자로 온 값을 콘솔에 출력하고, 자신을 다시 호출하여 인자로 받은값에서 1을 뺀 값을
재호출의 인자로 넘겨주는 것이다, 해당 과정에서 인자의 값이 0이된다면 재귀함수의 연쇄를 종료시키는 것이다.


문제

재귀를 사용하여 팩토리얼(factorial)을 구하는 함수를 구현해주세요. 팩토리얼이란 1에서부터 n까지의 정수를 모두 곱한것을 말합니다.

아래는 내가 처음으로 구현한 코드이다.

const factorial = (n) => {
  result = n * factorial(n-1);
  return result;
}

이 코드의 문제점으로는 예시에서 언급된 문제와같이 종료지점을 설정하지 않았기 때문에
처음 실행할 때 인자로 3을 넘겼다면 (3 x 2 x 1 x 0 x -1 x -2 .....) 처럼 무한히 곱해진다.

그래서 종료지점을 정해주었다.

const factorial = (n) => {
  if(n <= 1) return 1;
  result = n * factorial(n-1);
  return result;
}

이젠 제대로 동작한다.

마지막으로 코드를 간결하게 바꿔주었다.

const factorial = n => n <= 1 ? 1 : n * factorial(n - 1);

삼항연산자로 훨씬 깔끔하게 되었다.

profile
공부기록

0개의 댓글