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 |