개인공부/TIL(Today I Learned)

TIL 24일차_재귀 익숙해지기

soon327 2021. 2. 11. 00:31

재귀 익숙해지기


재귀함수를 짜면서 느끼는건
어렵다는 느낌도 있지만
결국엔 익숙하지 않기 때문에 어렵다고 생각되는 것 같다는 것이다.
재귀라는 낯선 흐름을 억지로 생각하려고 하기때문에 머리가 아프다는 느낌이었다.
결국 재귀라는 것에 익숙해지는 것이 재귀를 쉽게 다룰 수 있는 방법이 될 것이라 생각한다.

재귀함수 - unpackGiftbox

문제 : 선물 상자에 대한 정보를 담은 배열과 문자열을 입력받아 조건에 맞는 선물이 있는지 여부를 리턴해야 한다.

입출력 예시 : const giftBox = ['macbook', 'mugcup', ['eyephone', 'postcard'], 'money'];

let output = unpackGiftbox(giftBox, 'iphone');
console.log(output); // --> false

output = unpackGiftbox(giftBox, 'postcard');
console.log(output); // --> true

풀이

function unpackGiftbox(giftBox, wish) {

  //for loope로 giftBox배열의 요소들을 순회
  for (let i = 0; i < giftBox.length; i++){
    if(giftBox[i]===wish){
      return true;

      //요소가 배열인 경우 재귀로 배열이 아닌 경우때까지 쪼개서 요소를 확인한다.
    }else if(Array.isArray(giftBox[i])){
      let recursion = unpackGiftbox(giftBox[i],wish)

      //쪼개서 확인한결과 재귀의 return 값이 true가 뜨면 true를 리턴한다
      if(recursion){
      return true;
      }
    }
  }
  //return값이 없으면 wish와 일치하는 요소가 없는 것이므로 false를 리턴한다.
  return false;
}

Today's ?!

재귀함수를 작성하는 과정.
먼저 base case(더이상 쪼갤 수 없는, 재귀의 탈출조건), head, tail을 생각한다.
이들을 기준으로, 입력값의 크기와 순서를 생각하면서 재귀함수를 작성한다.
로직이 생각나지 않는다면,
양극단과 중간값을 생각해보면서 로직을 구상한 뒤, 재귀함수를 작성한다.

예를들어 입력값이 배열이면
양극단값은
[]
[1,[2,3],[[[],[2]],[123]]
이 두개로 나눌 수 있고


중간 값은
[1,2,3,4,5]
이렇게 생각할 수 있다.

이후 어떻게하면 반복되는 방법으로 결과를 도출해낼 수 있을지 생각하며 로직을 짠다.

'개인공부 > TIL(Today I Learned)' 카테고리의 다른 글

TIL 26일차_DOM이해하기  (0) 2021.02.13
TIL 25일차_DOM연습하기  (0) 2021.02.12
TIL 23일차_정렬, 재귀  (0) 2021.02.10
TIL 22일차_reduce()  (0) 2021.02.09
TIL 21일차_Twittler과제  (0) 2021.02.08