TIL 31일차 - 재귀

박진현·2021년 7월 20일
0

TIL

목록 보기
31/71

Achievement Goals

  • 재귀의 의미에 대해서 이해하고, 자바스크립트에서 재귀 호출을 할 수 있다.

    예를들어, 1부터 n번째 수 까지 더하는 함수를 만들라고 했을때

     const summation = function (num) {
      	let res = 0;
        for(i=1;i<=num;i++){
         res += i
         }
         return res
         }

    처럼 for문을 통해 나타낼 수 있지만 이 for문을 재귀함수로 나타낼 수도 있다. 모든 반복문은 재귀함수로 치환할 수 있다.

    const summation = function (num) {
      return num === 0 ? num : num + summation(num-1)
    }
  • 재귀를 언제 사용해야 하는지 알고 있다.

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            for (let k = 0; k < n; k++) {
                for (let l = 0; l < n; l++) {
                    for (let m = 0; m < n; m++) {
                        for (let n = 0; n < n; n++) {
                            for (let o = 0; o < n; o++) {
                                for (let p = 0; p < n; p++) {
                                    // do something
                                    someFunc(i, j, k, l, m, n, o, p);
                               }
                            }
                        }
                    }
                }
            }
        }
     }

    복잡한 문제를 비슷한 구조의 더 작은 문제로 나누어서 생각할 수 있을경우나 위 예시처럼 반복문이 너무 많거나 반목문의 중첩 횟수를 예측하기 어려운 경우에 재귀를 사용한다.

  • 재귀적 사고 연습을 통해 재귀 함수를 base case와 recursive case로 나눠서 작성할 수 있다.

    • Base Case : 문제를 더 이상 쪼갤 수 없는 경우 (재귀의 기초)
    • Recursive Case : 문제를 쪼갤 수 있는 경우
      • head : 배열의 첫 요소
      • tail : 배열의 첫 요소만 제거된 배열 (주로 재귀함수의 인자로 들어감)

재귀함수를 처음 접했을땐 어려웠는데 몇문제 풀다보니 무엇을 요구하는지 알게 되었고 이젠 능숙하게 사용할 수 있게 되었다. 개념을 배우고나서 codewars에서 상당히 많은 문제들을(비록 8kyu수준이지만) 재귀함수로 풀었다. 확실히 반복문보다 코드가 간결하고, 뭔가 직관적(?)이다! 오늘은 알고리즘을 많이 풀진 못했다.

알고리즘 50 ~ 55번까지 풀었다.

링크텍스트
정말 많은 문제들을 풀면서 순식간에 5kyu로 올라왔다. 이제 쉬운문제들은 차치하고 5~6kyu 수준의 문제들만 풀어봐야겠다. 프로그래머스 문제도 하루에 하나씩 풀어야지! 그리고 만약 정말 만약에 시간이 남는다면 풀어봤던 문제들을 파이썬으로 다시 풀어보고 싶다.

오늘부터 자기전에 머신러닝 야학 3기과정을 공부할거다.. 하루종일 공부만하지만 재밌는 공부니까 공부라는 생각이 안든다. 모든것이 게임과 같이 느껴져서 너무 행복하다. 재미썽!!

profile
👨🏻‍💻 호기심이 많고 에러를 좋아하는 프론트엔드 개발자 박진현 입니다.

0개의 댓글