[TIL] 재귀함수

민아·2022년 1월 26일
0

💁‍ 오늘의 TIL

  • 재귀함수와 스택오버플로우

📕 재귀함수와 스택오버플로우

가끔 게더타운에서 화면공유를 하고있는 내 화면을 또 클릭하게 되면 이러한 장면을 볼수가 있다.

이거 보고 생각나는게 거울 속의 나를 거울로 비추면 다시 거울속의 나 속에 거울속의 나 ... 로 끝없이 반복하지 않나. 내가 초등학교 다닐때 엘레베이터 거울속 13번째 나를 다시 마주보게 되면 죽는다는 괴담이 있었다. 물론 13번째는 너무 작아져서 보이지도 않는다.

아무튼 재귀호출은 끝없이 반복되므로 함수 내에 재귀호출을 중단하도록 조건을 설정해야 한다. 만약 조건문을 설정하지 않으면 메모리의 공간 이상을 사용하게 되어서 스택오버플로우에 의해 종료된다. 이를 방지하기 위해서 Java에서는 예외처리를 설정하여 프로그램 종료를 막고 에러를 알려준다.

내가 이해한 스택오버플로우: 할당된 메모리 이상으로 스택이 쌓이면 스택 영역을 벗어나게(overflow) 되어서 프로그램이 강제 종료된다.

더 생각해 봤을때 만약 게임에서 콤보스택이 쌓일때마다 데미지가 증가하게 설정했을때 최대스택 이상으로 데미지가 계산된다면? 이건 엄청 심각한 버그가 아닐까 ... 어떤 효용성이 있는지 잘 모르겠으니까 이렇게 생각하기로 했다.

재귀함수는 호출을 반복하는 만큼 메모리에 스택이 되기 때문에 메모리를 엄청나게 차지하게 되며 재귀함수가 끝날때는 함수를 닫으면서 스택된 메모리에서 pop을 하기 때문에 수행시간이 매우 느려진다. 그래서 재귀가 자연스럽거나 호출을 많이 하지 않는 범위일때 쓰이고 그 외에는 자주 쓰이지 않는다.

profile
그냥 꾸준히 하는중

0개의 댓글