[C, C++] 재귀함수

성현씨·2024년 2월 19일
0

C / C++

목록 보기
10/15
post-thumbnail

◾ 재귀함수

  • 재귀함수란 함수 안에서 자기 자신을 호출하는 것을 말한다.
  • 장점으로는 가독성과 구현의 용이가 있다는 것이고,
  • 단점으로는 실수할 가능성이 있으며, 성능이 많이 떨어진다. (여러 번 함수를 호출)
  • 그리고 사용하기가 어려워서 이해 하는데 오래 걸린다.
  • 반복문으로 대체가 가능하긴 한데 스택, 큐를 사용해야 한다.

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);
}

  • 마찬가지로 결과는 같지만 좀 더 간결해진다.
  • 하지만 크기가 커질수록 오류가 시간이 엄청 오래 걸린다. 그래서 꼬리함수를 사용하는데...
profile
순수청년

0개의 댓글