구름톤 챌린지 문제를 풀다가
노드를 방문하는 작업을 익숙한 DFS로 풀었더니 Error(Runtime Error)가 뜨지 뭐예요..
그래서 휴먼에러(오타 혹은 범위 실수)인 줄 알고 열심히 뒤졌지만 너무 맞는 코드였습니다.

그래서 인터넷에 검색해 본 결과!!
java.lang.StackOverflow라는 오류가 발생하는 것이었습니다.
이 오류의 발생 원인은 다음과 같습니다.
Java 프로그램 or JVM에서 작성되는 모든 스레드에는 고유 스택 공간(데이터를 담아 두는 더미)이 있습니다.
보통 스택 공간에는 지역변수가 저장되는데, 함수에서 변수를 선언하면 변수는 stack 메모리에 할당되고 함수를 빠져나오면
stack 메모리에서 해제됩니다.
애플리케이션에 사용 가능한 전체 스택 크기는 시작 동안 결정되고 해당 값은 포함할 수 있는 스레드 수를 결정해,
이를 초과하면 StackOverflow 오류가 발생하게 되는 것입니다.
특히 재귀함수를 쓸 때 많이 마주치게 되는 오류로,
재귀함수가 종료되지 않고 호출 스택에 계속해서 쌓이게 된다면 stack overflow가 발생하게 됩니다.
재귀함수를 구현할 때 꼭 고려해서 코드를 구성하셔야 합니다.
가장 큰 이유로, 종료되지 않은 무한 재귀로 이 오류가 발생하게 되면 양 끝 값을 먼저 고려해 주세요.
특히 n=0, 1일 경우와 n의 범위를 빼놓지 않고 고려하신다면 오류가 발생하지 않을 거예요..!
