재귀 함수(recursive)

mark1106·2023년 3월 14일
0
post-thumbnail

재귀함수란??

자기 자신을 반복해서 호출하는 함수이다.

위 그림과 같이 recursive라는 함수는 자신을 호출하여 print문을 출력한다.
그렇다면 이 함수는 언제 끝날까?
끝나지 않는다. 왜냐하면 위 함수는 종료 조건이 없기 때문이다.
우리는 재귀의 요소를 알아볼 필요가 있다.

재귀의 요소

재귀를 구성하는 요소는 2가지로 크게 구분할 수 있다.

1. 재귀 케이스(recursion)

2. 베이스 케이스(base case)


위 그림에서 알 수 있듯이 재귀 케이스는 함수를 다시 호출하는 부분이고 베이스 케이스는 함수를 탈출하는 조건이다. 처음 그림과 같이 재귀 케이스만 존재하고 베이스 케이스가 없는 경우 재귀 함수가 무한히 반복되기 때문에 탈출 조건을 주어 재귀 호출을 종료시킬 수 있다.

재귀함수 그림으로 이해하기

main함수에서 Recursive(N)를 호출하고 N부터 시작하여 재귀함수에 N-1, N-2 ····· 를 인자로 전달하여 재귀 함수를 호출하고 인자가 0이 되었을 때 종료하는 함수의 호출 순서를 알아보려 한다.

main 함수에서 Recursive(5)를 호출하여 5를 출력하고 recursive(5 - 1)을 호출하고 4를 출력하고 Recursive(4 - 1)을 호출하고 ····· Recursive(0)이 되었을 때 더 이상 재귀 케이스인Recursive를 호출하지 않고 return하는 것을 알 수가 있다.
출력 결과는 이렇다.

깨달은 점

재귀함수를 처음 배웠을 때는 "종료되지 않은 함수를 다시 호출하는 것이 가능한가?"라는 의문이 있었다. 하지만 재귀호출이 이루어지면 복사본이 만들어져 복사본이 실행이 되고 종료조건(베이스케이스)을 만나면 호출의 역순으로 함수를 종료시키는 원리인 것을 이해하니 재귀함수에 대한 감이 조금은 잡힌 것 같다.

profile
뒤돌아보면 남는 것은 사진, 그리고 기록 뿐

0개의 댓글