인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Sendyt님의 프로필 이미지
Sendyt

작성한 질문수

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

재귀함수와 함수를 지시하는 포인터

4:04질문입니다.

작성

·

68

·

수정됨

0

void countDowm함수에서 if구문이 끝난 후

cout << n <<"번째 재귀함수"<<endl; 에서

왜 0부터 시작하는 지는 알겠는데 어떻게 숫자가 증가하는 지,

왜 n이 역수로 출력이 되는지 더 자세한 설명 부탁드립니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

void countDowm 함수 내에서 if 구문이 끝난 후 cout << n <<"번째 재귀함수"<<endl;에서 숫자가 증가하는 것이 아니라, 실제로는 함수가 자신을 호출하는 과정, 즉 재귀 호출을 통해 먼저 함수가 호출되었다가 호출된 순서의 역순으로 완료되는 과정을 거치게 됩니다.

C++에서 재귀 함수는 자기 자신을 다시 호출하는 함수입니다. 함수가 자기 자신을 호출할 때마다 새로운 실행 컨텍스트가 생성되고, 각 함수의 로컬 변수는 이 실행 컨텍스트에 저장됩니다. 이 경우 n이라는 변수가 각 함수 호출마다 다른 값을 가집니다.

예를 들어, countDowm(3) 함수 호출이 이루어졌다고 가정할 때,

  1. countDowm(3)이 호출되고 n은 3입니다.
  2. countDowm(3) 내에서 countDowm(2)가 호출되고, n은 2입니다.
  3. 이후 countDowm(1), countDowm(0) 순으로 호출됩니다.

이때 재귀 호출이 더 이상 일어나지 않는 기저 조건(여기서는 아마 n이 0에 도달한 경우일 것입니다)에 도달하게 되면, 함수는 더 이상 자기 자신을 호출하지 않고 종료되기 시작합니다. 함수가 종료될 때마다 이전 함수 호출로 복귀하게 되는데, 이 과정이 마지막 호출에서부터 역순으로 발생하기 때문에 n의 값이 역수로 출력되는 것처럼 보이는 것입니다.

즉, countDowm(0)에서부터 countDowm(1), countDowm(2), countDowm(3) 순으로 함수가 종료되며 출력문이 실행되기 때문에 n이 역순으로 출력되는 것입니다.

재귀함수의 동작 원리를 이해하려면 함수 호출 스택과 실행 컨텍스트에 대한 이해가 필요합니다. 함수가 자신을 호출할 때마다 새로운 컨텍스트가 스택에 쌓이고, 각 함수의 실행이 완료되면 그 순서의 역순으로 스택에서 팝(pop)되면서 이전 함수로 돌아가는 과정을 거치면서 실행 컨텍스트에 따른 변수의 값을 확인할 수 있게 됩니다.

Sendyt님의 프로필 이미지
Sendyt

작성한 질문수

질문하기