이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

재귀

  • 2022.05.16 12:36
  • Algorithm/Theory && Tip
반응형

 

 

 

절차지향적인 사고를 버려야 재귀 파트를 이해할 수 있다.

 

재귀함수는 base condition(종료조건)이 있어야 하고, 모든 입력은 base condition으로 수렴해야 한다.

 

재귀함수를 사용하면 반복문을 사용하는 것 보다 효율적이지 않은 경우가 많고, 적절히 dp를 사용하지 않으면 계산했던 결과를 또 계산하는 경우가 많이 생길 수 있어 조심스럽게 사용해야 한다.

 

그럼에도 재귀를 이용하면 굉장히 편하게 작성할 수 있는 경우나, 재귀를 사용해야만 작성할 수 있는 코드들이 있으니 재귀를 포기할 수는 없다.

 

 

a에서 a/2를 호출하고 a가 1에서 return을 만나는 함수가 있다고 해 보자.

a가 1000이면 1000 -> 500 -> 250 -> 125 -> 62 -> 31 -> 15 ..... 이런 방식의 생각은 절차지향적인 생각이다.

 

재귀를 공부할 때는 절차지향의 사고를 잠시 접어 두고, 재귀적 사고를 구축해야 한다.

 

도미노를 쓰러뜨릴 때 첫 번째 도미노가 두 번째 도미노를, 두 번째 도미노가 세 번째 도미노를... 이후 k번째 도미노까지 쓰러짐을 알 수 있다.

 

재귀함수도 이와 비슷한데, base condition을 잘 정의했다면 그 다음 코드는 내가 쓴 코드를 믿고 가야한다.

아 그래 base 설정해뒀으니까 잘 되겠지 뭐.. 라고 의연한 태도를 가져야 한다.

 

다시 한 번 말하지만, 지금까지의 사고를 깨야 한다.

절차지향적인 사고를 붙잡고 있으면 재귀적 사고를 받아들이기 쉽지 않다. 

 

어느 정도 믿고 가는 영역도 있는데, 일단은 많은 연습을 통해 재귀적 사고에 익숙해지고 재귀 스타일의 코드에 익숙해지자.

반응형

'Algorithm > Theory && Tip' 카테고리의 다른 글

최단 거리  (0) 2022.06.27
위상정렬  (1) 2022.06.24
그래프  (0) 2022.05.12
매개 변수 탐색  (0) 2022.05.04
정렬 기본 - Java  (0) 2022.05.03

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 최단 거리

    최단 거리

    2022.06.27
  • 위상정렬

    위상정렬

    2022.06.24
  • 그래프

    그래프

    2022.05.12
  • 매개 변수 탐색

    매개 변수 탐색

    2022.05.04
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (677)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (9)
    • 💬 기록 (7)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바