본문 바로가기

Programming Language/JavaScript

[JS]재귀함수 예제2

Q1.

러시아 전통인형 마트료시카에 대한 정보를 담은 객체와 수를 입력받아 조건에 맞는 인형이 있는지 여부를 리턴해야 합니다.

<내 코드> - 실패

function findMatryoshka(matryoshka, size) {
  if (matryoshka === null){return false}
  else if (matryoshka.size === size){return true}
  findMatryoshka(matryoshka.matryoshka, size)

  return false
}
  • 항상 빈 배열, 빈 객체와 같은 예외적인 경우를 먼저 처리해줘야 한다고 생각하여 null 값을 먼저 처리해줬다. 하지만 재귀적으로 함수가 실행되게 해야하므로, 오히려 걸리적거리는 옵션이다. 굳이 써줄 필요가 없었다.
  • 위와 같이 그저 재귀함수를 실행되게만 구성해놓으면, 재귀함수가 실행되어 결과값이 true를 반환하더라도 마지막 return false 구문에 의해 전체함수가 false로 출력됨을 명심해야한다.
  • 복잡한 문제일수록 간단히 생각해야한다.
    • 객체의 size와 함수의 인자 size의 값이 같은지 확인한다.
    • 같다면 true를 리턴하고 다르다면, 객체 내 matryoshka 속성값에 접근하여 함수를 재귀호출한다.
    • 재귀호출을 모두 마쳤음에도 함수가 어떤 값도 출력하지 않았다면 false를 리턴한다.

<레퍼런스>

function findMatryoshka(matryoshka, size) {
  // recursive case
  if (matryoshka.size === size) {
    return true;
  } else if (matryoshka.matryoshka && matryoshka.size > size) {
    return findMatryoshka(matryoshka.matryoshka, size);
  }

  // base case
  return false;
}
  • 객체의 값이 null인지 아닌지 확인할 수 있는 방법으로 matryoshka.matryoshka와 같이 간단히 쓸 수 있다. null은 false이기 때문이다.
  • 재귀 함수를 그냥 실행하면 결국엔 false가 리턴되지만, 위와 같이 함수 앞에 return을 붙이면 재귀함수에서 실행된 값이 리턴되게 할 수 있다.

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

[JavaScript]fs 라이브러리  (0) 2022.07.14
[JS]재귀함수 예제3  (0) 2022.05.15
[JS]재귀함수 예제1  (0) 2022.05.13
[JS]재귀함수 예제  (0) 2022.05.11
[JS]arr의 다양한 메소드  (0) 2022.05.08