C++ Chapter 7.10 : 재귀적 함수 호출
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 7. 함수 : Recursion
재귀적 함수 호출
: 함수 내부에서 자기 자신을 호출하는 것. 종료 조건이 반드시 필요하다.
🔔 예제 1
#include <iostream>
using namespace std;
void countDown(int count)
{
cout << count << endl;
countDown(count - 1); // 자기 자신을 호출
}
int main()
{
countDown(5);
return 0;
}
countdown(5) // count(4)를 호출
countdown(4) // count(3)를 호출
countdown(3) // count(2)를 호출
countdown(2) // count(1)를 호출
countdown(1) // count(0)를 호출
countdown(0) // count(-1)를 호출
...
이 예제 같은 경우에는 종료 조건이 없어서 무한으로 호출되고 있다. (마치 영화 <인셉션>에서 꿈에서 꿈으로 계속해서 들어가는 것과 비슷한 그림) 이 때문에 스택 메모리가 꽉차 생기는 스택 오버플로우 문제가 일어날 수 있다. 따라서 재귀적 함수 호출을 할 때는 꼭 똑같은 함수가 그만 호출되는 경우, 즉 종료 조건을 꼭 명시해주어야 한다.
🔔 예제 2
#include <iostream>
using namespace std;
void countDown(int count)
{
cout << count << endl;
if ( count > 0 ) // count <= 0 일 때 재귀적 호출을 종료된다.
countDown( count - 1); // 자신이 자신을 호출
}
int main()
{
countDown(5);
return 0;
}
countdown(3) // 3출력 + count(2)를 호출
countdown(2) // 2출력 + count(1)를 호출
countdown(1) // 1출력 + count(0)를 호출
countdown(0) // 0출력
/* count > 0 에 해당하지 않아 재귀적 호출 종료 */
if ( count > 0 ) 조건에 해당되지 않아 재귀적으로 함수를 호출하는 과정이 종료된다.
🔔 예제 3
#iclude <iostream>
using namespace std;
int sumTo( int sumnum)
{
if (sumnum <= 0)
return 0;
else if (sumnum <= 1)
return 1;
else
{
return sumTo(sumnum - 1) + sumnum;
}
}
int main()
{
cout << sumTo(10) << endl;
return 0;
}
이 경우엔 재귀적 함수 호출 종료 조건이 두 개다. sumnum이 0이 되는 경우와 sumnum이 1이 되는 경우.
재귀적 함수 호출이 종료되면서 단계적으로 함수를 호출했던 곳으로 돌아온다
return sumTo(sumnum - 1) + sumnum; sumTo(sumnum - 1)
의 최종 리턴값을 가지고 다시 돌아온다.
sumTo(5) // sumTo(4)호출
sumTo(4) // sumTo(3)호출
sumTo(3) // sumTo(2)호출
sumTo(2) // sumTo(1)호출
sumTo(1) // (sumnum <= 1 에 해당되어 더이상 재귀 호출 X)
return 1
return 1 + 2
return 1 + 2 + 3
return 1 + 2 + 3 + 4
return 1 + 2 + 3 + 4 + 5
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기