문제노트_재귀

Bitnara Lee·2021년 5월 11일

배열: 머리와 꼬리로 나눠서 생각

리턴시킨 재귀들을 변수에 담아놨다가
한번에 스프레드 문법으로 모을 수 있다.(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개의 재귀를 동시에 실행시켜 하나의 결과값으로 리턴시킬 수 있다.

profile
Creative Developer

0개의 댓글