본문 바로가기
공부/코드스테이츠

재귀함수 (Recursion)

by 시계의온도 2020. 4. 8.

아무리봐도 모르겠는 재귀함수. 일단, PASSME 시험을 통과하기 위해 복습을 해보았다. 

 

#. 재귀함수란? 

  자기자신을 호출하는 함수. 대표적인 문제로 factorial(팩토리얼) 이 있다. 

 

#. 문제 : getElementsByclassName 함수를 재귀함수를 통해 구현하시오. 

   Hint : document.body, classList, childNodes를 활용하라. 

 

#. 생각의 흐름.

대략 2시간 가량 고민하다가, 결국 모르겠어서 포기하고 다시 예전에 했던 정답지를 펼쳐보았다. 예전에도 못풀어서, 다른 사람 풀이를 참고했는데.. 재귀란..나에게 넘사벽. 똑같은데서 또 막히더라 ^-^.. 지난번에도 이해를 못하셨단 소리겠쬬? 

 

먼저, 그래도 발전이 있었던 점은 classList.contains까지 스스로 생각해낸점. childNodes대신, children을 사용한점. for문으로 돌리고선, 부모자식노드가 있는 경우 단순 for문으로는 풀이가 풀가능했던걸 다시 인지한점이다. 

 

막혔던 부분을 생각해보면, document.body.children[0].children[0] 즉 children을 계속 반복해야 어떤 포맷이든 모든 className을 찾을 수 있는데, 어떻게 해야 반복을 시킬 수 있을지 감을 못잡았다. 길이로 해도 안되고, 재귀는 쓰라는데 어디 써야되는지 모르겠고, 재귀를 써야하는 포인트가 저부분인거 같은데 당췌 어떻게 적용시키지?!!!!?? 란 느낌. 결국 필요한 요소는 다 생각해 냈으나, 그걸 조합해서 함수로 만들지는 못했다. OTL

 

결과적으로 풀이를 보긴했지만, 이해도가 향상되었다. 두달 뒤에 이거 다시 풀어볼테다. 그때는 꼭 .. 내 생각으로 풀 수 있기를 바란다. 하다못해 코드라도 기억나기를. 

 

#. 정답 코드 리뷰 

#. 코드를 console에 순차적으로 실행시켜본다면? 

하나하나 실행되면서 착실히 children[0].children[0]으로 탐색해가는걸 알 수 있다. 아니 이거 푸신분들. 천재아니냐고요. 이정도가 평균이면 너무 슬픈데. 개발 할 수 있을까...ㅠ????!

 

+) test용 html

 

 

댓글