본문 바로가기
Programming/C, C++

LV2 C++ 재귀(recursion) 호출

by Dev_카페인 2022. 9. 13.
반응형

 

 

[lv2/C++] 재귀(recursion) 호출

 

재귀를 사전에서 찾아보면 어떠한 것을 정의할 때 자기 자신을 참조하는 것이라고 나온다. 함수를 사용하다 보면 자기 자신을 호출해야 더 수월한 경우가 있다. 대부분의 프로그래밍 책을 보면 재귀 호출을 설명할 때 팩토리얼(Factorial)을 예시로 들곤 한다. 재귀호출을 사용하지 않았을 경우와 함께 비교해 보자.

 

반복문 사용

#include <iostream>

using namespace std;

int main()
{
	int n, result = 1;

	cin >> n;
	for (int i = n; i > 0; i--) {
		result *= i;
	}
	cout << result << endl;
	
	return 0;
}

재귀 호출 사용

#include <iostream>

using namespace std;
int Factorial(int n);

int main()
{
	int n;
	cin >> n;

	cout << Factorial(n) << endl;
	
	return 0;
}

int Factorial(int n) {
	return (n <= 1) ? 1 : n * Factorial(n - 1);
}

//int Factorial(int n) {
//	if (n <= 1)
//		return 1;
//	else
//		return n * Factorial(n - 1);
//}

 

직접 프로그램을 구현해보고 숫자를 입력해 결과를 확인해보자.

재귀호출 시 중요한 점은 탈출 조건을 명시해야한다는 점이다. 만약 자기 자신을 호출하다가 탈출조건이 안 맞을 경우 무한루프에 빠져 프로그램이 종료되지 않는 현상이 발생한다. 팩토리얼 계산의 경우 반복문이 더욱 이해하기 쉽고 간단해보이지만 복잡한 프로그램의 경우 소스 코드를 보다 단순화 시킬 수 있다.

 

 

반응형