배열: 머리와 꼬리로 나눠서 생각
리턴시킨 재귀들을 변수에 담아놨다가
한번에 스프레드 문법으로 모을 수 있다.(result는 if문 밖, 맨 밑에서 결과로써 리턴가능)
if (Array.isArray(el)){
let newArr = flattenArr(el)
result.push(...newArr);
} else {
result.push(el)
}
.
.
return result;
}
재귀의 순환과정에 대해 헷갈려왔던것 debugger:
결과가 리턴되고 나서 다시 원래 불려온 지점의 로직으로 돌아가서 저장됨(위 예시에서 중첩배열이었던 것은 재귀로 배열이 벗겨져 result.push(el)이 되고(결과배열이 되어) 밑으로 배출되지만 다시 재귀한 로직 밑으로 (...newArr)로써 저장됨
function unpackGiftbox(giftBox, wish) {
// if(giftBox.length === 0 || wish === ""){
// return false;
// }
//recursive !
for(let gift of giftBox){
if(gift === wish){
return true;
}else if (Array.isArray(gift)){
let recurs = unpackGiftbox(gift,wish)
if(recurs){
return true;
}
}
}
return false; // 이것이 base case!!
}
pass 한 것 : recurs = true / 재귀 결과로 recurs에 true / false 넣고 밑 if문에서 검사. false 면 다시 진행할수 있다
처음에 한것 : 그냥 재귀를 return - 앞에서 빈배열 false조건 걸림 + 그결과가 재귀 return으로 와서 리턴되버려서 다음것 진행 x /아니더라도 재귀return에서 false리턴됨
2개의 재귀를 동시에 실행시켜 하나의 결과값으로 리턴시킬 수 있다.