본문 바로가기

Programming Language/JavaScript

[JS]재귀함수 예제

재귀함수란?

함수가 자신을 다시 호출하는 구조로 만들어진 함수이다. 재귀함수는 종료조건이 있어야 하며, 종료조건을 설정해주지 않으면 무한 반복을 하게된다. 재귀함수로 작성이 되는 코드는 반복문으로도 작성할 수 있다.

배열의 각 요소 추출(재귀함수 활용)

head와 tail을 나누어 호출하면된다. 이때 tail은 slice를 통해 head 나머지 부분을 의미하도록 하고, 이를 재귀호출을 통해 head 값을 계속 끌어낸다. 확실히 반복문보다 코드가 깔끔하게 짜지긴하나, 생각하는데 좀 어렵긴하다.

Q1.

수(num)를 입력받아 1부터 num까지의 합을 리턴해야 합니다.

function sumTo(num) {
  if (num === 0) {return 0}
  if(num <= 1) {// 종료조건
    return 1
  }
  return num + sumTo(num - 1) // 자신 함수 호출
}

Q2.

수를 입력받아 홀수인지 여부를 리턴해야 합니다.

function isOdd(num) {
  if (num === -1) {return true} // 음수일 때
  if (num === 0) {return false} // 양수일 때
  if (num < 0){
    num = Math.abs(num) // 음수처리
  }

  return isOdd(num - 2) // 재귀호출
}

Q3.

수를 입력받아 n-factorial(n!; 엔-팩토리얼) 값을 리턴해야 합니다. n! 은 1부터 n까지 1씩 증가한 모든 값의 곱입니다.

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

Q4.

수(num)를 입력받아 피보나치 수열의 num번째 요소를 리턴해야 합니다.

0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

function fibonacci(num) {
  if (num === 0){return 0}
  if (num === 1){return 1}
  return fibonacci(num - 1) + fibonacci(num - 2)
}

Q5.

배열을 입력받아 모든 요소의 합을 리턴해야 합니다.

function arrSum(arr) {
  if (arr.length === 0){return 0}
  const head = arr[0];
  const tail = arr.slice(1);
  return head + arrSum(tail)
}

Q6.

배열을 입력받아 모든 요소의 곱을 리턴해야 합니다.

function arrProduct(arr) {
  if (arr.length === 0){return 1}
  const head = arr[0];
  const tail = arr.slice(1);
  return head * arrProduct(tail)
}

'Programming Language > JavaScript' 카테고리의 다른 글

[JS]재귀함수 예제2  (0) 2022.05.15
[JS]재귀함수 예제1  (0) 2022.05.13
[JS]arr의 다양한 메소드  (0) 2022.05.08
[JS]Function관련 문법  (0) 2022.05.04
[JS]객체, 배열 연습문제  (0) 2022.04.26