1. 재귀함수의 개념

재귀함수란, 어떤 함수에서 자신을 다시 호출하여 작업을 수행하는 방식의 함수를 의미한다. 즉, 함수 정의 내에 같은 이름의 함수가 올 때 이를 재귀함수라 한다.

<aside> ⚠️ 재귀함수 사용시 반드시 탈출 조건이 있어야 stack overflow를 방지할 수 있다.

</aside>

재귀함수의 예시

def function(n);
	if n == 0;
		return
	else:
		print(n)
		function(n-1)

function(3);

# 결과
3
2
1

function(3)을 호출하면

=> function(2)를 호출하고 (메모리 영역이 구분되고 변수가 만들어진다.)

=> function(1)을 호출하고 (메모리 영역이 구분되고 변수가 만들어진다.)

=> function(0)이 되면 리턴한다. (메모리 영역이 구분되고 변수가 만들어진다.)

=> function(1)로 돌아가서 없어진다.

=> function(2)로 돌아가서 없어진다.

2. 재귀함수의 호출 및 리턴 과정

1) 일반 함수의 호출 및 리턴 과정

Untitled

순서대로 차례차례 흘러감

2) 재귀함수의 호출 및 리턴 과정

Untitled

모든 함수는 호출되면 메모리에 새로운 공간을 확보해서 매번 전혀 다른 공간에서 작업이 진행됨. 소스코드에서는 같은 공간처럼 보이지만 실제 실행되는 코드는 전혀 다른 공간에서 이뤄진다고 생각하는 편이 좋음.

이런 방식을 반복하다보면 같은 코드가 메모리 공간만 옮겨다니면서 무한히 반복되기 때문에 메모리가 부족할 때까지 멈추지 않고 반복하다가 프로그램이 종료되는데, 이것 때문에 재귀함수를 작성할 때에는 언제 멈춰야 할지 탈출조건이 필요함.