TIL : 210615_화_(재귀)

beablessing·2021년 6월 15일
0

TIL

목록 보기
18/33
post-thumbnail

오늘배운것

  • 재귀적 사고 연습하기
  • factorial로 알아보는 재귀
  • 재귀 알고리즘 문제들

재귀

어떤 함수가 스스로를 호출하는 것.

재귀를 사용해야할 때?

  • 주어진 문제를 더 작은 문제로 나눌 수 있는 경우
  • 중첩된 반복문이 많거나 반복문의 중첩횟수를 예측하기 어려운 경우

재귀적 사고

  1. 재귀 함수의 입력값과 출력값을 정의하기
  2. 문제를 쪼개고 경우의 수를 나누기
    문제를 더 작은 단위로 쪼갤 수 있는지 확인하고, 기준을 정해 나누기
  3. 단순한 문제 해결하기
    base case :문제를 더 이상 쪼갤 수 없는 경우. 재귀의 기초는 나중에 재귀함수를 구현할때 재귀의 탈출조건(재귀 호출이 멈추는 조건)을 구성.
    ex) 빈배열 = 0;
  4. 복잡한 문제 해결하기
    head/tail로 나누어 문제에 접근하는 등의 방법으로 문제 해결
  5. 코드 구현하기

알고리즘 문제에서 알게된 것.

  • 배열을 인자로 입력받는 경우, head/tail 로 나누는 경우가 꽤 많음
    tail: 배열의 첫번재 요소 : arr[0]
    head: 배열의 첫번째 요소를 제외한 나머지 요소들을 가진 배열 : arr.slice(1)

  • isOdd를 구할때,
    인자로 받는 num에서 계속해서 -2를 빼주는 작업을 해주기

  1. num=0 false
  2. num=1 true
  3. num<0 isOdd(-num) // 음수의 경우 -를 붙여 양수로 변환시켜주기
  • fibonacci의 기본개념

  • arrLength
    count수를 하나씩 증가하는 역할을 하는 코드가 필요한 경우,
    재귀함수를 사용하는 경우에는 count라는 변수를 따로 선언해 주지 않아도 해결이 가능했다.

코드로 살펴보면

function 길이구하기(arr) {
	let head
    let tail 
    //arr = [head, ...tail] 이러한 구조를 가짐.
    if(빈배열인경우){
    	return 0;
    }
   	else{  //빈배열이 아닌경우
    	return 1 + 길이구하기(tail);
    }
}
  • truty와 falsy값의 구분?? 아직 어렵다
if(!ma.ma ===null){ return false; }
이렇게 하면 ma.ma값이 빈객체인 경우를 따로 조건을 작성해 주어야 한다. 

if(!ma.ma){ return false; }
이렇게 작성하는 경우 빈객체인 경우 false 를 리턴하는 것도 포함한 조건이 된다.

이 부분은 아직도 헷갈림... 뭘까 대체 ?

  • 참고로 truthy와 falsy값에 대한 부분을 작성해보면,
**참과 거짓(Truthy & Falsy)**
1. False인 값
undefined
null
0
-0
NaN
false
''
""
**위에 명시된 값들을 제외한 모든 값들은 true이다.**

2. True인 값
'0' (0을 포함하는 문자열)
'false' (false를 포함하는 문자열)
[] (빈 배열)
{} (빈 객체)
function () {} (빈 함수)

느낀점

5주가 지나긴 했지만 다시푸는 기본 알고리즘 문제인데도,
처음 접하는 페어와 큰 차이가 느껴지지 않았다.
휴~ 왜 내가 기수이동을 하게 되었는지 알게되는 부분 :)

기수이동(꼭 마지막 기수이동이 되길 바라며)을 했는데 요번 기수분들은 굉장히 활발했다.
서로 아는 지식도 나누고.. 특이한(?) 조크도 자꾸 나누어서 실소가(찐웃음이 아니야..)
터지기도 몇번,,
그치만 무엇보다 이분들의 적극성과 열정이 느껴져서 나에게 자극이 된다.
결국은 기수이동도 나쁘지 않다는 이야기^_^

요번에는 예복습 진짜 놓치지 않겠돠...

profile
프론트엔드 개발자

0개의 댓글