[코딩테스트/Python] 꼭 필요한 자료구조 기초: 재귀함수

2023. 5. 8. 19:34·Algorithm

스택과 큐 관련 내용은 이전 글 참고

https://emperor-one-data-study.tistory.com/33

 

[코딩테스트/Python] 꼭 필요한 자료구조 기초: 스택과 큐

자료 구조에 대해 왜 알아야 할까? 프로그래밍 문제 중 "탐색" 유형은 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정이다. 코딩 테스트에서는 그래프, 트리 등의 자료구조 안에서 탐색을

emperor-one-data-study.tistory.com

 

DFS와 BFS를 구현하기 위해서는 스택과 큐 뿐만 아니라 재귀 함수에 대해서도 이해하고 있어야 한다. 

 

재귀 함수 (Recursive Function)

: 자기 자신을 다시 호출하는 함수 

 

가장 간단한 재귀함수 예제

위와 같이 재귀 함수 호출 문구가 무한히 호출된다. 자기 자신을 무한히 불러오기 때문이다. 

RecursionError: maximum recursion depth exceeded while calling a Python object

다음과 같은 내용이 출력되는데, 파이썬 인터프리터가 호출할 수 있는 호출 횟수를 넘어갔기 때문에 발생하는 에러이다. 따라서 재귀 호출을 무한대로 진행할 수는 없다. 

 

재귀 함수의 종료 조건

재귀 함수를 문제 풀이에 사용할 때는 꼭 종료 조건을 명시해야 한다. 조건을 명시하지 않으면 위의 결과처럼 함수가 무한 호출된다. 

다음은 재귀함수를 100번 호출하도록 하는 코드이다. if문으로 조건을 명시해주었다. 

 

이전 포스팅에서 DFS, BFS 구현을 위해 스택과 큐를 알아보았었다. 이후에 재귀 함수를 알아햐하는 이유는, 재귀 함수의 수행이 스택 자료 구조를 통해 이루어지기 때문이다. 함수를 계속 호출했을 때, 가장 마지막에 호출한 함수가 먼저 수행을 끝내야 그 앞의 함수 호출이 종료되기 때문이다. 즉, 재귀 함수는 내부적으로 스택 자료 구조와 동일하다는 것을 기억해야 한다. 따라서 스택 자료 구조를 활용해야 하는 상당수의 알고리즘은 재귀 함수를 이용해서 간편하게 구현될 수 있다!

 

재귀함수를 이용하는 대표적 예제: 팩토리얼 문제 

n! = 1*2*3*.........*n(n-1)*n

0!=1!=1 을 종료 조건으로 생각하여 n이 1이하가 되었을 때 함수 종료하도록 하기 

factorial의 의미를 생각하며 구현한 factorial 함수와 재귀함수로 구현한 recur함수의 결과값은 같다. 

하지만 factorial 함수는 반복문이 포함되어 있어 시간 복잡도가 좀 더 크다. 또한 코드가 좀 더 간결함을 알 수 있다. 

 

문제 유형으로 나오는 개념은 아니지만 알아두면 여러 문제가 많이 쓰일 수 있다. 

 

[reference]

도서 "이것이 코딩 테스트다" (https://github.com/ndb796/python-for-coding-test)

'Algorithm' 카테고리의 다른 글

[코딩테스트/ Python] 시간을 단축시켜주는 정규 표현식/프로그래머스 신규 아이디 추천  (1) 2023.06.11
[코딩테스트/ Python] 탐색 알고리즘 DFS/ BFS  (0) 2023.05.13
[코딩테스트 /Python] 프로그래머스 기능 개발  (0) 2023.05.04
[코딩테스트/Python] 프로그래머스 두 큐 합 같게 만들기  (0) 2023.05.01
[코딩테스트/Python] 꼭 필요한 자료구조 기초: 스택과 큐  (0) 2023.03.13
'Algorithm' 카테고리의 다른 글
  • [코딩테스트/ Python] 시간을 단축시켜주는 정규 표현식/프로그래머스 신규 아이디 추천
  • [코딩테스트/ Python] 탐색 알고리즘 DFS/ BFS
  • [코딩테스트 /Python] 프로그래머스 기능 개발
  • [코딩테스트/Python] 프로그래머스 두 큐 합 같게 만들기
재온
재온
  • 재온
    Carpe Diem
    재온
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • AI (18)
        • NLP (5)
        • Toxicity Prediction (6)
        • Paper review (5)
      • Statistics (5)
        • mathematical statistics (2)
        • Time Series (3)
      • Algorithm (16)
      • Deep Learning (1)
      • Machine Learning (3)
      • TIL (11)
      • 공모전 및 프로젝트 (2)
      • 회고록 (3)
      • IT News (2)
      • 취준일기 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      코딩테스트 개념
      Chatgpt api inference
      chatgpt api 발급받기
      시계열
      코딩테스트 파이썬
      코딩테스트
      NLP Paper
      이것이코딩테스트다
      크롬드라이버크롤링
      파이썬
      노래가사분석
      Transformer기초
      맞춤법 교정 모델
      SKT AI Fellowship 5기 후기
      음악가사분석
      NLP
      time series
      tokenization repair
      SKT AI Fellowship
      알고리즘
      ChatGPT
      Prompt pattern
      AI 뉴스레터
      SMILES to vector
      Seqeunce to seqeunce
      Greedy 알고리즘
      Prompting
      ssh 접속오류
      Graph AI
      chatgpt api 실습
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    재온
    [코딩테스트/Python] 꼭 필요한 자료구조 기초: 재귀함수
    상단으로

    티스토리툴바