◾ 재귀함수
- 재귀함수란 함수 안에서 자기 자신을 호출하는 것을 말한다.
- 장점으로는 가독성과 구현의 용이가 있다는 것이고,
- 단점으로는 실수할 가능성이 있으며, 성능이 많이 떨어진다. (여러 번 함수를 호출)
- 그리고 사용하기가 어려워서 이해 하는데 오래 걸린다.
- 반복문으로 대체가 가능하긴 한데 스택, 큐를 사용해야 한다.
1. 팩토리얼 재귀함수 미사용
int Factorial(int _iCount)
{
// int i = 5;
int iValue = 1;
for (int k = 0; k < _iCount - 1; ++k)
{
iValue *= (k + 2);
}
return iValue;
}
int main()
{
int iValue = Factorial(5);
printf("%d : \n", iValue);
return 0;
}
2. 팩토리얼 재귀함수 사용
int Factorial_Re(int _iCount)
{
if (1 == _iCount)
{
return 1;
}
return _iCount * Factorial_Re(_iCount - 1);
}
int main()
{
int iCount = Factorial_Re(5);
printf("%d : \n", iCount);
return 0;
}
1. 피보나치 재귀함수 미사용
// 피보나치 수열 (0, 1), (1, 1) 대부분 1, 1 을 사용한다
// 1 1 2 3 5 8 13 21 34 55.....
int Fibonacci(int _iCount)
{
if (1 == _iCount || 2 == _iCount)
{
return 1;
}
int iPrev1 = 1;
int iPrev2 = 1;
int iValue = 0;
for (int i = 0; i < _iCount - 2; ++i)
{
iValue = iPrev1 + iPrev2;
iPrev1 = iPrev2;
iPrev2 = iValue;
}
return iValue;
}
2. 피보나치 재귀함수 사용
// 피보나치 수열 재귀함수
int Fibonacci_Re(int _iCount)
{
if (1 == _iCount || 2 == _iCount)
{
return 1;
}
return Fibonacci_Re(_iCount - 1) + Fibonacci_Re(_iCount - 2);
}
- 마찬가지로 결과는 같지만 좀 더 간결해진다.
- 하지만 크기가 커질수록 오류가 시간이 엄청 오래 걸린다. 그래서 꼬리함수를 사용하는데...