한 단계씩 console.log하고 잘 되는지 확인하기!
1~13 재귀함수로만 모든 반복 진행
14~15 재귀 함수와 반복문을 응용해서 → 반복문을 돌면서 어떤 조건을 만족하면 자기 자신을 호출
트리 구조
function unpackGiftbox(giftBox, wish){
1. 재귀함수의 입력값과 출력값 정의하기
unpackGiftbox : ([],wish) => boolean
선물상자 / 선물
[1,2,[3,4,5]6,7]
상자를 두번 열어야 한다 -> 방법은 같다
2. 문제를 쪼개고 경우의 수를 나누기
선물상자를 열고
선물인지 상자인지 확인
선물이면 맞는지 확인
상자면 열고 반복
선물인지 상자인지 확인
선물이면 맞느지 확인
상자면 열고 반복
상자면 열고 반복
선물인지 상자인지 확인
선물이면 맞느지 확인
상자면 열고 반복
for(let i=0;i<giftBox.length;i++){
const item = giftBox[i]
let isWish = false;
if(Array.isArray(item){
isWish = unpackGiftBox(item, wish)
//또 적용하면 빈 배열이 있으면 false를 리턴해서 다음 요소를 검사 안하고 끝난다
//값이 나오면 저장해놔야 반환 가능
//그냥 return하면 안되는 이유 :
// true면 ㅇㅋ, false면 false 반환하면서 반환하면서 함수가 끝난다
if(isWish)return true;
}
else if(item === wish){
return true;
}
//아무것도 리턴 안하면 undefined => false (X)
return false
}
재귀함수로 모든 반복하는 법
재귀함수와 반복문을 같이 활용하는 법
⇒ 완전 탐색을 다 하고 나서 마지막 요소를 찾을 수 있다
직관적으로 하기 위해 그대로 재귀함수를 리턴하면
마지막 요소를 찾지 않고 배열에서 바로 재귀함수를 사용하니까
리턴 false에 걸려서 마지막 요소에 접근하지 않는다
부모가 하나고 자식이 n개인 구조
여러개의 작은 문제로 쪼갤 수 있다
트리 구조와 비슷하다 [tree traversal walking : 나무를 걷는 거]
⇒ 재귀함수를 사용해서 해결할 수 있다