오늘 배웠던 내용은 재귀
입니다. 현재 배우고 있는 장고와는 조금 연관성이 떨어질 수 있으나 더 높은 난이도의 알고리즘을 해결하기 위해서는 재귀
를 이해하는 것은 필수라고 합니다.
재귀함수란?
스스로를 호출하는 함수를 의미합니다.
재귀함수는 큰 분류로 보면 2가지로 나눌 수 있는데 바로 리턴값이 없는 재귀
와 리턴값이 있는 재귀
입니다.
예시는 아래와 같습니다.
def recursion(n):
if n < 5:
print(n)
recursion(n + 1)
recursion(1)
이 함수는 재귀를 이용해서 n이 5보다 작을 경우까지만 n을 출력하게 되어있습니다.
반복문을 사용하지 않아도 함수 스스로 자신을 호출하기에 출력값은 1, 2, 3, 4가 순서대로 출력됩니다.
def recursion(n):
if n <= 0:
return 0
return n + recursion(n-1)
print(recursion(4))
재귀를 이용해 1부터 n까지의 합을 구하는 코드입니다. n이 0보다 작거나 같다면 0을 반환하게 되어 밑에 프린트문에서 4를 입력받으면 recursion(4), recursion(3) ...
recursion(0)까지 순서대로 호출되고 recursion(0)의 경우 리턴값이 0이기 때문에 if문으로 들어가 0을 리턴하게 됩니다.
함수의 작동순서를 보기쉽게 정돈하면
recursion(4) 함수 호출
recursion(4)에서 recursion(3) 함수 호출 (n=3)
recursion(3)에서 recursion(2) 함수 호출 (n=2)
recursion(2)에서 recursion(1) 함수 호출 (n=1)
recursion(1)에서 recursion(0) 함수 호출 (n=0)
recursion(0)에서 0을 반환
recursion(1)에서 1 + 0 = 1을 반환
recursion(2)에서 2 + 1 = 3을 반환
recursion(3)에서 3 + 3 = 6을 반환
recursion(4)에서 4 + 6 = 10을 반환
따라서 결과값은 10이 나오게 됩니다.