본문 바로가기

CS/알고리즘

[JS 알고리즘 - 재귀3] 통상적인 재귀의 잠재적 위험

아래 강의를 듣고 내용을 정리한 포스트 입니다.

https://www.udemy.com/course/best-javascript-data-structures/

 

JavaScript (JS) Algorithms and Data Structures Masterclass

정렬, 리스트, 힙 스택을 포함한 12개의 알고리즘과 10개 이상 자료구조 학습으로 기술 면접 완벽하게 대비!

www.udemy.com

 

이번에는 재귀 솔루션을 작성할때 흔히 발생하는 함정에 대해 알아보도록 하겠습니다.

1. 종료 조건이 없는 경우

가장 흔한 실수 중 하나는 종료 조건이 없는 경우입니다. 종료 조건이 없으면 콜 스택에 계속 함수가 쌓이게 되고, 'maximum call stack size exceeded' 에러가 발생합니다.

노드의 여부에 따라, 엔진에 따라 최대 스택 크기는 다르지만 일반적으로 1000개 정도의 스택을 쌓을 수 있습니다. maximum call stack size exceeded 에러는 '스택 오버 플로우' 라고도 합니다. 이것은 재귀가 멈추지 않는다는 의미입니다. 종료점이 없기 때문 이죠.

2. 잘못된 값을 반환하거나 반환하는 것을 잊는 경우

예를 들어, 재귀 호출마다 작은 값을 호출해야 하는데 그렇지 않고 계속 동일한 값에 머물러 있다면 종료 조건이 없는 것과 동일하게 최대 스택 사이즈 초과 문제가 발생할 것입니다.

콜 스택은 모든 항목이 서로에게 의존하면서 계속 기다리는 것으로, 마지막에는 어떤 값을 도출해서 값을 반환해야 합니다. 연산 등을 해서 다시 이전 함수로 돌려보내면서, 본래의 함수가 호출했던 값으로 되돌아 때까지 계산을 계속하게 됩니다.