본문 바로가기
Develop/Algorithm

재귀(Recursion)

by jaeyoungb 2022. 9. 20.

재귀란 '본디의 곳으로 다시 돌아오는 것' 이라는 뜻이다.

 

말 그대로, 재귀 함수는 메서드 내에서 다시 본 메서드를 호출하는 것을 말한다.

 

 

다음은 재귀의 대표적인 예제인 팩토리얼을 재귀 호출로 구현한 메서드 예시 코드이다.

 

 

return에 의한 반환 값에 다시 한 번 본 메서드가 들어가게 된다. 이러한, 동작 원리를 재귀라고 한다.

 

 

재귀의 장점은 다음과 같다.

  • 불필요한 반복문을 줄일 수 있으므로, 코드가 간결해지고 수정이 용이하다.
  • 여러 변수를 사용하지 않아도 된다.

 

재귀의 단점은 다음과 같다.

  • 반복문과는 달리, 코드의 흐름을 한눈에 알아보기 어렵다.
  • 반복문보다 더 많은 메모리를 사용하게 된다.
  • 메서드를 호출하고 종료된 이후에, 복귀를 위한 컨텍스트 스위칭 비용이 발생한다.

 

 

재귀함수는 조건이 존재한다.

 

재귀 호출이 종료되는 시점(base case)이 무조건 존재해야 하고, 문제의 크기를 점점 작은 단위로 쪼갤 수 있어야 한다.

 

만약에, 종료되는 시점이 없다면, StackOverFlow라는 에러가 발생한다.

이 에러가 뜬다면, 무한 루프에 빠졌구나! 라고 생각하면 되겠다.

'Develop > Algorithm' 카테고리의 다른 글

그래프(Graph) 구조  (0) 2022.09.24
트리(Tree) 구조  (0) 2022.09.24
스택(Stack)과 큐(Queue)  (0) 2022.09.22
재귀 함수와 메모리 사용량 관계 _ 꼬리 재귀  (1) 2022.09.21
배열  (0) 2022.09.06