Programming Language/JavaScript
[JS]재귀함수 예제2
마손(Mason)
2022. 5. 15. 13:59
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을 붙이면 재귀함수에서 실행된 값이 리턴되게 할 수 있다.