본문 바로가기
프로그래밍, 알고리즘 (Algorithm)

재귀호출이란? 재귀호출 알고리즘 쉬운 설명

by 뉴디라 2023. 3. 29.

1. 재귀호출(Recursive algorithm) 알고리즘이란?

재귀호출 알고리즘은 함수가 자기 자신을 호출하는 것을 포함하는 알고리즘을 말합니다. 즉, 함수가 자기 자신을 호출하여 문제를 해결하는 방식입니다. 이러한 함수를 재귀함수라고 합니다. 이러한 방법으로 알고리즘을 구현할 경우, 큰 문제를 더 작은 문제로 분할하여 해결하는데 도움이 됩니다.

 

 

2. 재귀호출이 사용되는 이유

재귀호출은 알고리즘의 구현과 이해를 쉽게 만들어줍니다. 반복문을 사용하는 코드보다 변수 사용이 적으며 더 직관적입니다. 또한, 재귀호출을 사용하면 코드가 더욱 모듈화(코드를 논리적으로 분할하여 관리하기 쉽게 만드는 것)되며, 코드의 재사용성이 증가합니다. 

 

 

3. 재귀호출의 장단점

장점:

알고리즘의 구현이 간단해집니다. 그리고 코드의 가독성이 높아집니다.

재귀적으로 문제를 해결하는 것이 가독성이 높고 이해하기 쉬운 경우가 많습니다.

 

단점:

함수를 반복적으로 호출하므로, 스택 메모리가 부족해질 수 있습니다.

반복문에 비해 함수 호출의 오버헤드가 크다는 단점이 있으며, 무한루프에 빠질 가능성이 있습니다.

 

 

4. 재귀호출 알고리즘을 만드는 방법

재귀호출 알고리즘을 만드는 방법은 다음과 같습니다.

   

   1) 문제를 작은 부분으로 분해합니다.

   2) 작은 부분 문제가 해결될 때까지 재귀적으로 함수를 호출합니다.

   3)작은 부분 문제의 결과를 결합하여 원래 문제를 해결합니다.

 

 

5. 재귀호출 파이썬 예시 코드

- 첫번째로 1부터 n까지의 합을 구하는 알고리즘을 예시로 보여드리겠습니다.

 

먼저 억지기법 알고리즘입니다. 반복문을 이용해 값을 계속해서 더해나가는 방식입니다.

 

억지기법:

n = 10
result = 0
for i in range(1, n+1):
    result += i
print(result)

 

 

다음은 재귀호출 알고리즘입니다.

 

재귀호출:

def sum(n):
    if n == 1:
        return 1
    else:
        return n + sum(n-1)

n = 10
result = sum(n)
print(result)

이 함수는 if  n == 1: 구문에서 n이 1인 경우에는 1을 반환합니다.

이것은 재귀호출을 멈추는 종료조건입니다. 

재귀호출 알고리즘은 계속해서 함수를 호출하기때문에 종료조건이 필요합니다.

else: 구문에서 n과 sum(n-1)의 합을 반환합니다.

이렇게 입력값을 달리하여 함수 자기자신을 다시 호출하는 재귀호출을 통해 문제를 작은 부분으로 분해하고,

작은 문제를 해결한 결과를 합쳐서 원래 문제를 해결합니다.

 

 

 

- 아래는 두번째 재귀호출 예시코드입니다.

재귀호출을 사용하여 숫자 n의 팩토리얼을 구하는 파이썬 코드입니다.

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

n = 5
result = factorial(n)
print(f"{n}! = {result}")

이 코드에서 함수 factorial(n)은 매개변수로 숫자 n을 받습니다.

만약 n이 0인 경우에는 1을 반환하여 재귀호출을 멈추는 종료조건이 됩니다.

이외의 경우에는 nfactorial(n-1)의 곱을 반환합니다.

이렇게 자기 자신을 호출하여 문제를 작은 부분으로 분해하고, 작은 문제를 해결한 결과를 합쳐서 원래 문제를 해결합니다.

댓글