재귀 / 호출 스택 (콜스택) / 재귀호출함수 / 디버깅
: 자기자신을 호출하는 절차, 자기자신을 호출하는 함수
자기자신을 호출하는 함수라면, 과정을 계속 되풀이한다고 생각된다.
그렇다면 재귀를 왜 사용해야할까?
답은 사용하는 자바스크립트나 많은 솔루션에 사용을 하기 때문이다. JSON.parse, JSON.stringfy, DOM, DocumentElement 등 자바스크립트 엔진을 사용하는 예시이다. 내부를 살펴보면 재귀를 사용하는 경우가 많다!
모두 중첩된 트리구조로 되어있다는 것을 기억하자.
이처럼 우리만의 데이터구조, 트리나 그래프를 생성하는 등 순회알고리즘, 그안에 요소를 다시 부르는 경우처럼 많은 솔루션에 필요하다. 생각보다 아주 많은 곳에 사용한다는 것을 알고 중요성을 인지하고 스터디를 진행하자!
함수를 실행한다 했을때 반환값을 얻기 위해서는 순서가 있을 것이다. 올바른 순서로 진행되기 위해서는 데이터구조가 존재한다. 자바스크립트에서는 그것을 “호출 스택”이라고 부른다! 간단하게 새로 추가하는 함수는 꼭대기에 추가된다고 생각하면 쉽다. 후에 실행이 되면서 꼭대기부터 하나씩 제거된다.
재귀함수를 들여다보자 !
재귀함수에 두가지 요소 중에 하나는 종료조건이다. 두번째는 다른 입력값이다.
function countdown(num) {
if (num <= 0) {
console.log("All done!");
return;
}
console.log(num);
num--;
countdown(num);
}
countdown(3);
//print 3
//countdown(2)
//print2
//countdown(1)
//print1
//countdown(0)
//print "ALL DONE"
print 되는 값을 확인해보면 return으로 종료조건을 걸고 재귀적으로 다른 입력값을 넣어주는 것에 초점을 두자. 실제로 종료조건에 도달하면 “ALL DONE” 콘솔이 찍히고 종료가 되는 기본적인 카운트 로직이다.