작성
·
68
·
수정됨
0
void countDowm함수에서 if구문이 끝난 후
cout << n <<"번째 재귀함수"<<endl; 에서
왜 0부터 시작하는 지는 알겠는데 어떻게 숫자가 증가하는 지,
왜 n이 역수로 출력이 되는지 더 자세한 설명 부탁드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
void countDowm
함수 내에서 if
구문이 끝난 후 cout << n <<"번째 재귀함수"<<endl;
에서 숫자가 증가하는 것이 아니라, 실제로는 함수가 자신을 호출하는 과정, 즉 재귀 호출을 통해 먼저 함수가 호출되었다가 호출된 순서의 역순으로 완료되는 과정을 거치게 됩니다.
C++에서 재귀 함수는 자기 자신을 다시 호출하는 함수입니다. 함수가 자기 자신을 호출할 때마다 새로운 실행 컨텍스트가 생성되고, 각 함수의 로컬 변수는 이 실행 컨텍스트에 저장됩니다. 이 경우 n
이라는 변수가 각 함수 호출마다 다른 값을 가집니다.
예를 들어, countDowm(3)
함수 호출이 이루어졌다고 가정할 때,
countDowm(3)
이 호출되고 n
은 3입니다.countDowm(3)
내에서 countDowm(2)
가 호출되고, n
은 2입니다.countDowm(1)
, countDowm(0)
순으로 호출됩니다.이때 재귀 호출이 더 이상 일어나지 않는 기저 조건(여기서는 아마 n
이 0에 도달한 경우일 것입니다)에 도달하게 되면, 함수는 더 이상 자기 자신을 호출하지 않고 종료되기 시작합니다. 함수가 종료될 때마다 이전 함수 호출로 복귀하게 되는데, 이 과정이 마지막 호출에서부터 역순으로 발생하기 때문에 n
의 값이 역수로 출력되는 것처럼 보이는 것입니다.
즉, countDowm(0)
에서부터 countDowm(1)
, countDowm(2)
, countDowm(3)
순으로 함수가 종료되며 출력문이 실행되기 때문에 n
이 역순으로 출력되는 것입니다.
재귀함수의 동작 원리를 이해하려면 함수 호출 스택과 실행 컨텍스트에 대한 이해가 필요합니다. 함수가 자신을 호출할 때마다 새로운 컨텍스트가 스택에 쌓이고, 각 함수의 실행이 완료되면 그 순서의 역순으로 스택에서 팝(pop)되면서 이전 함수로 돌아가는 과정을 거치면서 실행 컨텍스트에 따른 변수의 값을 확인할 수 있게 됩니다.