일반적으로 recursion(재귀함수)가 stack를 많이 사용하므로,
tail recursion을 통해 stack을 적게 사용하는 방법이 좋다.
간단한 factorial을 예로 든다면.. REF
int Factorial(int n)
{
return FactorialTail(n, 1);
}
int FactorialTail(int n, int acc) // acc : accumulator의 약자
{
if (n == 1) return acc;
return FactorialTail(n - 1, acc * n); // 일반 재귀에서의 n * Factorial(n-1)와 달리 반환값에서 추가 연산을 필요로 하지 않음
}
출처: http://bozeury.tistory.com/entry/꼬리-재귀-최적화Tail-Recursion [따..딱히 공부하려고 포스팅하는 건 아니니까..!]
하지만 java에서는 아직 tail recursion Optimization이 지원되지 않는다.
이유는 security등 각종 jdk코드에서 stack을 count한다던지,
하는 이유때문이라고 하는데
자세한 내용은 여기: REF