반응형
[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);
//}
직접 프로그램을 구현해보고 숫자를 입력해 결과를 확인해보자.
재귀호출 시 중요한 점은 탈출 조건을 명시해야한다는 점이다. 만약 자기 자신을 호출하다가 탈출조건이 안 맞을 경우 무한루프에 빠져 프로그램이 종료되지 않는 현상이 발생한다. 팩토리얼 계산의 경우 반복문이 더욱 이해하기 쉽고 간단해보이지만 복잡한 프로그램의 경우 소스 코드를 보다 단순화 시킬 수 있다.
반응형
'Programming > C, C++' 카테고리의 다른 글
LV3 C++ 클래스와 객체 (0) | 2022.09.14 |
---|---|
LV2 C++ 인라인(Inline) 함수 (0) | 2022.09.13 |
LV2 C++ 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference) (0) | 2022.09.13 |
LV2 C++ 함수(function) 사용 기초 (0) | 2022.09.13 |
LV2 C++ 동적 할당(Dynamic Allocation) (0) | 2022.09.08 |