TIL 6주차 2,3일 - 재귀 함수

Sang heon lee·2021년 6월 16일
0

TIL 리스트

목록 보기
27/60

학습 내용

1. 재귀 함수

  • 재귀(recursion) : 어떤 함수가 스스로 자신을 호출하는것

1.1 언제 사용한는가?

  • 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우

  • 중첩된 반복문이 많거나 반복문의 중첩 횟수를 예측하기 어려운 경우

1.2 재귀적으로 사고하기

1.2.1 재귀함수의 입력값과 출력값 정의하기

  • 입력값과 출력값을 생각하면 목표를 정의하는데 도움이 됩니다.

1.2.2 문제를 쪼개고 경우의 수를 나누기

  • 문제를 쪼갤 기준을 정하고, 정한 기준에 따라 문제를 더 큰 경우와 작은 경우로 구분합니다.

  • 모든 경우에 문제를 해결하는 방법이 적용된다면 올바른게 나눈 것입니다.

  • 더 이상 쪼갤수 없는 경우까지 나눕니다.

1.2.3 단순한 문제 해결하기

  • 가장 해결하기 쉬운 문제 혹은 더 이상 쪼갤수 없는 경우부터 해결합니다.

  • 이를 재귀의 기초(base case)라고 부릅니다.

  • 이는 재귀 함수의 탈출 조건이 됩니다.

1.2.4 복잡한 문제 해결하기

  • 남아있는 경우의 수(recursive case)들을 해결합니다.

1.3 재귀함수 샘플

function recursive(input1, input2, ...) {
  // Base Case , 문제를 더 이상 쪼갤 수 없는 경우
  if (문제를 더 이상 쪼갤 수 없을 경우) {
    return 단순한 문제의 해답;
  }
  // recursive Case, 그렇지 않은 경우
  return 더 작은 문제로 새롭게 정의된 문제
  // 예1. someValue + recursive(input1Changed, input2Changed, ...)
  // 예2. someValue * recursive(input1Changed, input2Changed, ...)
}

2. 재귀 함수 활용 예시

2.1 JSON

JSON.stringify (객체) 
// 객체의 내용물을 모두 string 타입으로 변환시켜줍니다.

2.2.1 사용

A. JSON.stringify (직렬화)
  • 객체를 문자열 타입으로 변환시켜주어 누군가에게 전송을 할수 있게 만들어 준다.
B JSON.pares (역직렬화)
  • 변환된 문자열 타입으로 다시 객체 타입으로 변환시켜 준다.

2.2.2 기본 규칙

  • 객체의 키(key)에는 반드시 쌍따옴표를 붙어야 합니다.
  • 객체의 값(value)에는 반드시 쌍따옴표로 감싸하 합니다.
  • 키 와 값 사이 // 속성(키:값) 사이에는 공백이 있어서는 안됩니다.

2.2 트리 구조

  • 스프린트를 통하여 확인

더 알아볼 내용

  • 재귀 함수와 메모리 사용량 간의 관계 (javascript recursion memory leak)
  • 꼬리 재귀 (tail recursion in js)
  • 하노이의 탑 재귀 (js tower of hanoi in recursion)
  • 조합 재귀함수 (js combination in recursion)

느낀 점 && 미비한 점

재귀 함수라는게 이해를 돕기 위한 문제는 간단했지만 실사용할거 같은 코드 에서는 너무 복잡하다. 복잡하고 어려운 이유는 규칙을 모른다는 것이 아닌 사고의 차이인거 같다. 누가 더 머리속에서 상황 파악, 전체적인 구조, 흐름 등을 잘 담고 있느 냐에 따라 재귀 함수의 활용이 차이가 나는거 같다.
이건 단기간에 익히고 늘릴수 있는게 아니라고 생각한다. 다양한 코드, 알고리즘 등을 보면서 프로그래밍 적 사고를 늘려나간다면 같이 향상될수 있을거라고 생각한다.

profile
개초보

0개의 댓글