TIL_2020.04.16(목) -재귀함수, 시간복잡도

nRecode·2020년 4월 16일
0

TodayILearned

목록 보기
22/95

JSON.stringify,getElementsByClassName 구현하기

재귀함수를 통해 위 함수와 같은 기능을 하는 함수를 구현했다... 테스트 케이스를 통해 구현하는 문제였는데 케이스들은 다 통과했는데 의문점이 여전히 남아있다.

전달인자에 배열이나 객체가 들어왔을 때, 각각의 요소를 재귀하는데 요소의 타입이 number거나 boolean이어도 따옴표를 같이 출력하지 않았다.

또, return 할 때 따옴표나 [],{}에 따라 return의 형식이 바뀌는 모습을 볼 수 있었다.
(+)coplit의 문제도 이와 비슷한 문제인 듯

내일도 저 문제를 풀어보는 시간이 있으니깐 그 때 확인해 봐야 할 것 같다.


재귀함수

어제 확인을 위해서 질문한 내용이 맞다는 것을 확인하고 그 코드를 count를 추가시키는 재귀 함수를 돌릴때

function multiplicativePersistence(num,count = 0) {
  //생략
  if(num.length > 1){
    count++;
    //생략
    multiplicativePersistence(b,count);
    //count = multiplicativePersistence(b,count);이라고 해야함
  }

  return count;
}

이런식으로 했더니 첫번째만 count한 값인 1만 return 되는 것이었다... 그래서 어제와 다를게 없는 코드인데 결과가 달라서 약간 멘붕(?)이었는데 이유를 이해했다.

어제 재귀를 통해 전달한 것은 배열이었고 이는 call-by-reference이다. 함수를 선언할때 매개변수로 선언했던 값과 재귀를 돌렸을때 전달인자의 주소가 같지만,

위의 코드에서 count는 타입이 정수이기 때문에 call-by-value이며 이는 값을 주소가 아닌 값을 저장하는 것이기 때문에 다시 재귀가 돌았을 때, 새로운 주소에 값을 저장한다.

이 역시 확실한 정답이 필요해서 일단 help-desk에 질문을 올려놓은 상태이다.


시간복잡도
슬라이드 강의를 통해 시간 복잡도라는 개념을 공부했다.
아무래도 빅오는 학교에서 배웠던 개념이라 그런지 이해하는데 오랜 시간이 걸린지는 않았다...

코드의 시간 복잡도를 간결하게!

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글