본문 바로가기
!?/C++

함수의 재귀호출

by Where's my namespace 2012. 8. 11.

재귀호출이란, 자기자신을 호출하는 것이다.  아리송할 수도 있지만 예제를 보자.

 

void test () {

void test()

}

위와 같은 코드가 재귀호출의 예이다. 함수내에서 자신을 또 호출 하는것이다. 잘쓰지 않는다면 위의 경우처럼 탈출구가 없기때문에 무한루프에 빠지게 된다.

 

이 재귀호출을 하는 함수를 흔히, 재귀함수 라고 부른다.   재귀함수의 경우 어떤경우에 쓰면 편하게 쓸수 있을까.

다음의 예제 코드를 보자.

void test ( int a = 10) {

cout << "a = " << a << endl;

if ( a < 0 )

return 0;

test(a-1);

cout << "a" << a << endl;

}

위의 함수의 경우 출력값이 어떻게 될까?  답은

10 9 8 7 6 5 4 3 2 1 0 -1 0 1 2 3 4 5 6 7 8 9 10 이 출력된다.  즉 재귀함수의 경우 실행했던 순서와 반대로 끝이난다.

이는 스택의 경우이다. 스택이란 접시를 생각할수있다. 접시를 10개를 쌓으면 다시 쓸때는 젤 윗접시부터 쓰게 된다.

즉 FILO(First in Last Out) 가장 먼저 깐 접시가 가장 나중에 쓰인다.

 

재귀함수의 경우도 똑같다. 가장 나중에 실행된 재귀함수가 가장 먼저 종료되면서 결과적으로 값이 저렇게 출력된다.

즉, 재귀함수는 값을 입력 해서 결과가 반대로 나오는 경우에 쓰면 아주 좋을 것이다.

가장 찾기 쉬운 얘가 10진수를 2진수로 바꾸는 경우다.

'!? > C++' 카테고리의 다른 글

동적메모리 할당  (0) 2012.08.11
함수의 포인터  (0) 2012.08.11
함수  (0) 2012.08.11
c/c++ 의 꽃 포인터  (0) 2012.07.05
객체  (0) 2012.06.27