본문 바로가기
Algorithm

재귀(recursive)

by isn`t 2024. 9. 15.
  • 파이썬 초정독 스터디 - 코딩테스트 합격자되기 파이썬 편 도서를 참고하여 작성된 글입니다.

재귀 함수

  • 자기 자신을 호출(recursive call)하는 방법
  • 문제를 반복적이고, 작은 단위로 분해햐여 처리
  • 더이상 분해할 수 없는 base condition에 도달하면 호출을 종료

재귀 함수를 사용하는 이유

  • 같은 논리를 작은 단위로 반복하여 해결 가능한 경우, 복잡한 문제를 단순화 하여 해결할 수 있음
  • 특히 트리 구조의 논리를 처리하고자 할 때 유용함
  • 코드를 간결하게 작성할 수 있음

재귀 함수 사용시 주의할 점

  • 모든 함수는 호출시 메모리를 차지하며, 컴퓨터의 메모리는 한정적이므로 recursion depth 또한 제한적임
    • 따라서 반드시 base condition이 필요함
  • 함수 호출 스택
    • 재귀 함수는 호출될 때마다 함수의 매개변수, 지역 변수, 반환 주소 등을 저장하기 위해 스택에 새로운 프레임이 추가함
    • 재귀 호출이 많아질수록 스택에 쌓이는 프레임의 수도 많아져, 메모리 사용량이 증가
  • 따라서 스택 오버플로우나, 메모리 사용으로 인한 성능 문제를 야기할 수 있음
  • 재귀 함수를 사용할 때는 문제의 크기가 점점 줄어들어야 함. 일정한 반복이 지속된다면 재귀가 끝나지 않기 때문.

재귀 함수를 반복문으로 변환하기

재귀 함수로 작성된 팩토리얼

def factorial(n):
    if n < 2:
        return 1
    else:
        return n * factorial(n-1)

반복문으로 작성한 팩토리얼

def factorial(n):
    result = 1
    for i in range(n, 1, -1):
        result *= i
    return result

'Algorithm' 카테고리의 다른 글

스택(stack)  (2) 2024.09.07
배열  (8) 2024.09.01
데이터 타입, 앱실론, 함수, 람다표현식  (0) 2024.08.24
시간 복잡도와 빅오 표기법  (0) 2024.08.17