ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 재귀함수 문제
    Topic/JavaScript 2021. 12. 18. 22:58
    반응형

    재귀함수 사례  

     

    재귀함수 문제_1

     

    function unpackGiftbox(giftBox, wish) {
      for (let i = 0; i < giftBox.length; i++) {
        if (giftBox[i] === wish) {
          return true
        }
        else if (Array.isArray(giftBox[i])) {
          let result = unpackGiftbox(giftBox[i], wish);
          if (result) return true;
        }
      }
      return false;
    }

     

    주어진 선물박스와 위시가 일치하는지 확인하는 문제이다.

    giftBox가 이렇게 주어지고

    ['macbook', ['eyephone', [], ['postcard']], 'iphone'];​

    wish로 'iphone'을 원한다면 ?

    우선 giftBox가 배열이기 때문에 배열을 순회하면서 그 요소가 문자열이면 wish와 같은지 여부 확인,
    배열이라면 그 안에서 재귀함수를 써서 다시 그 배열 안의 요소가 wish와 같은지 확인한다.

    여기서 중요한 점은 재귀함수를 쓸 때 그 자체를 리턴하는 것이 아니라 
    임의의 변수에 할당해서 그 값의 true or false여부를 판단하는 것이 중요하다.

     

    재귀함수 문제_2

     

    function flattenArr(arr) {
      let newArr = []
      for (let i = 0; i < arr.length; i++) {
        if (typeof arr[i] === 'number') {
          newArr.push(arr[i])
        } else {
          let result = flattenArr(arr[i])
          newArr.push(...result)
        }
      }
      return newArr
    }

     

    arr.flat()을 쓰지 않고 배열을 평탄화?하는 과정을 구하는 문제이다.

    다차원 배열을 입력받아 1차원 배열로 변환하여 리턴하는 것인데, 위의 문제와 같이 배열을 순회하면서 문자열인지, 배열인지 
    확인한 후에 재귀함수를 써서 그 배열을 다시 확인하는 과정이 중요했다.

    이번 문제 역시 재귀함수를 실행하는 과정에서 변수에 담아주고 그 결과를 push해주는 것이 포인트!

     


     

    반응형

    'Topic > JavaScript' 카테고리의 다른 글

    JSON 정리  (0) 2021.12.22
    비동기, 고차함수, 콜백,  (0) 2021.12.20
    JSON  (0) 2021.12.15
    클래스를 이용한 모듈화, Prototype, 생성자 함수  (0) 2021.12.13
    고차함수, map, filter, reduce  (0) 2021.11.30
Designed by LEO.