다음 함수가 꼬리 재귀인지 판별하시오.
#include <stdio.h>
long long int factorial(int n);
int main(void)
{
printf("%lld", factorial(5));
return 0;
}
long long int factorial(int n)
{
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
꼬리 재귀가 아니다.
factorial(int n)이 꼬리 재귀가 되려면 아래의 두 조건을 모두 만족시켜야한다.
(1) 함수 코드의 제일 마지막줄에서 자기 자신을 호출
(2) 함수가 반환된 이후 더 이상 연산이 없음
위 함수는 1번 조건은 만족시키나, 반환된 후 n과 곱해지므로 2번 조건은 만족시키지 않는다.
따라서 꼬리 재귀가 아니다.