본문 바로가기
Python/Python Programming language

[초급] 파이썬 함수와 모듈 / 재귀 함수

by Maccrey Coding 2024. 10. 1.
728x90
반응형

 

파이썬에서 함수모듈은 프로그램을 짧고 깔끔하게 만들어 주는 도구입니다.

오늘은 그중에서도 조금 어려울 수 있는 재귀 함수에 대해 알아보려고 합니다. 재귀 함수는 문제가 복잡할 때 매우 유용하게 쓰일 수 있지만, 개념을 처음 배우는 초보자에게는 헷갈릴 수 있어요.

그러니 차근차근 쉬운 예시와 함께 배워봅시다!

1. 함수와 모듈이란?

함수란?

함수는 반복되는 작업을 묶어서 이름을 붙인 코드의 모음입니다. 우리가 프로그램을 작성할 때 같은 작업을 여러 번 해야 하는 경우, 그 작업을 함수로 만들어서 필요할 때마다 호출할 수 있습니다.

함수 정의 예시

def hello():
    print("안녕하세요!")

위 코드에서 hello()라는 함수를 만들었어요. 이 함수를 호출하면 "안녕하세요!"라는 문장이 출력됩니다.

모듈이란?

모듈은 함수와 여러 기능들을 모아놓은 파일입니다. 하나의 큰 프로그램을 여러 개의 작은 파일로 나누어서 관리할 수 있게 해주죠. 예를 들어, 파이썬에는 math라는 기본 모듈이 있습니다. 이 모듈을 사용하면 수학 계산을 쉽게 할 수 있죠.

모듈 사용 예시

import math

print(math.sqrt(16))  # math 모듈의 sqrt 함수 사용

math 모듈의 sqrt 함수는 제곱근을 계산하는 함수입니다. 이처럼 모듈을 사용하면 프로그램을 더 효율적으로 작성할 수 있습니다.

2. 재귀 함수란?

이제 재귀 함수에 대해 알아볼 차례입니다. **재귀 함수(Recursion)**란 자기 자신을 다시 호출하는 함수를 말합니다. 조금 헷갈릴 수 있지만, 쉽게 말하면 문제를 더 작은 문제로 쪼개서 반복적으로 푸는 방법이라고 할 수 있어요.

재귀의 핵심 개념

재귀 함수는 두 가지 필수 조건이 있습니다.

  1. 기저 조건(Base Case): 재귀 함수가 멈추는 조건. 이 조건이 없으면 함수가 무한히 실행되면서 프로그램이 멈추게 됩니다.
  2. 재귀 호출(Recursive Call): 함수가 자기 자신을 다시 부르는 부분. 이때 문제를 조금 더 간단하게 만들어 나가는 것이 중요합니다.

3. 재귀 함수 예시: 팩토리얼

팩토리얼은 어떤 숫자 n에 대해 n! = n * (n-1) * (n-2) * ... * 1로 계산됩니다. 이를 재귀 함수로 구현해볼게요.

팩토리얼 재귀 함수 코드

def factorial(n):
    if n == 1:  # 기저 조건
        return 1
    return n * factorial(n - 1)  # 재귀 호출

설명

  • 기저 조건: if n == 1에서 함수는 더 이상 자기 자신을 호출하지 않고 1을 반환합니다. 기저 조건이 없으면 재귀 함수가 계속 호출되어 무한 루프에 빠질 수 있어요.
  • 재귀 호출: n * factorial(n - 1)에서 함수는 자기 자신을 호출하면서 n을 1씩 줄여갑니다. 결국, factorial(1)이 될 때까지 줄어들고 계산이 마무리됩니다.

팩토리얼 예시

print(factorial(5))  # 출력: 120

실행 과정

  1. factorial(5)는 5 * factorial(4)를 호출.
  2. factorial(4)는 4 * factorial(3)를 호출.
  3. 계속해서 줄어들다가 factorial(1)에서 기저 조건에 도달하여 1을 반환.
  4. 마지막에 5 * 4 * 3 * 2 * 1 = 120이 계산됩니다.

4. 재귀 함수 예시: 피보나치 수열

재귀 함수는 피보나치 수열(Fibonacci Sequence)를 계산할 때도 자주 사용됩니다. 피보나치 수열은 1, 1, 2, 3, 5, 8, 13, ... 처럼 이전 두 숫자의 합으로 이루어진 수열이에요.

피보나치 재귀 함수 코드

def fibonacci(n):
    if n == 1 or n == 2:  # 기저 조건
        return 1
    return fibonacci(n - 1) + fibonacci(n - 2)  # 재귀 호출

설명

  • 기저 조건: n이 1이거나 2일 때는 1을 반환합니다. 피보나치 수열의 첫 번째와 두 번째 숫자는 항상 1이기 때문이죠.
  • 재귀 호출: fibonacci(n - 1) + fibonacci(n - 2)에서 함수는 자기 자신을 두 번 호출하여 이전 두 숫자의 합을 계산합니다.

피보나치 수열 예시

print(fibonacci(6))  # 출력: 8

실행 과정

  1. fibonacci(6)은 fibonacci(5) + fibonacci(4)로 나눠집니다.
  2. 계속해서 나눠지다가, fibonacci(1)과 fibonacci(2)에서 기저 조건에 도달하여 1을 반환.
  3. 최종적으로 8이 계산됩니다.

5. 재귀 함수의 장단점

장점

  • 복잡한 문제를 간단하게 해결할 수 있습니다. 문제를 작게 나누어 푸는 방식이라, 특히 수학적 문제나 자료 구조에서 유용합니다.
  • 코드가 깔끔해집니다. 반복문을 쓰는 것보다 더 짧고 간결한 코드로 문제를 해결할 수 있습니다.

단점

  • 성능 문제가 있을 수 있습니다. 재귀 함수는 호출될 때마다 메모리를 사용하기 때문에, 너무 깊은 재귀 호출은 메모리 부족이나 성능 저하를 일으킬 수 있습니다.
  • 기저 조건을 잘못 설정하면 무한 루프에 빠질 수 있습니다. 프로그램이 멈추지 않고 계속 실행되면서 오류가 발생할 수 있죠.

6. 모듈을 사용한 재귀 함수

파이썬에서는 여러 함수를 모아서 모듈로 만들어 사용할 수 있습니다.

이렇게 하면 복잡한 프로그램을 더 쉽게 관리할 수 있어요.

예를 들어, 재귀 함수를 파일에 저장해 다른 파일에서 불러와 사용할 수 있습니다.

# mymodule.py
def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n - 1)

다른 파일에서 모듈을 불러와 사용할 수 있습니다.

# main.py
import mymodule

print(mymodule.factorial(5))  # 출력: 120

이처럼 모듈을 사용하면 코드를 더 깔끔하게 나누어서 관리할 수 있습니다.

재귀 함수 활용하기

재귀 함수는 처음에는 헷갈릴 수 있지만, 차근차근 예시를 통해 익히면 강력한 도구가 될 수 있습니다. 팩토리얼과 피보나치 수열 같은 문제를 직접 해결해 보면서 재귀 함수의 작동 원리를 이해해 보세요.

추가로 도전해볼 문제

  1. 재귀를 사용해 역순으로 문자열 출력하기.
  2. 재귀로 리스트 안에 있는 모든 숫자의 합 구하기.

구독!! 공감과 댓글,

광고 클릭은 저에게 큰 힘이 됩니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

728x90
반응형