꼬리재귀란,
재귀 함수를 호출할 때 현재 함수 호출까지의 값을 계산하여 함수를 끝내고 새로운 함수를 호출함으로써 함수 호출로 인한 스택이 쌓이지 않도록(스택을 덮어씌워 재사용 가능) 구현하는 방식이다.
function factorial_tail(num, acc = 1){
if(num < 1) { return acc; }
else { return factorial_tail(num-1, num * acc)}
}
꼬리재귀 코드는 재귀와 달리 현재 함수 실행 결과를 계산한 뒤 매개변수로 필요한 연산을 전달하며, 현재 함수에서 다음 재귀 실행 결과를 이용한 별도의 작업을 수행하지 않는다.
이러한 경우에는 앞으로 현재 실행 컨텍스트를 사용할 필요가 없기 때문에 이를 저장하지 않으며 현재 함수의 스텍 프레임 또한 쌓을 필요가 없다.
(지금 실행한 함수 스택 프레임을 다음 함수가 덮어쓰면서 재사용한다.)
꼬리재귀를 사용하기 위해서는 컴파일러가 이러한 최적화 기능을 지원하는지 확인하여야 한다.
참고)
https://study-ihl.tistory.com/48