4:04질문입니다.
111
작성한 질문수 7
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)되면서 이전 함수로 돌아가는 과정을 거치면서 실행 컨텍스트에 따른 변수의 값을 확인할 수 있게 됩니다.
switch 구문과 break continue 구문 강의 질문드립니다
0
56
1
opreator*
0
75
1
cin은 c언어에서의 scanf와 동일하다고 봐도 될까요?
0
140
0
질문이 있습니다.
0
108
1
temp1 선언
0
91
1
const MyStruct& 사용
0
113
0
인트형 포인터의 사이즈가 8이 나옵니다.
0
217
1
MyStruct* temp = new MyStruct; 에서 temp도 delete를 해야하나요?
0
127
1
#include <iostream> 중복
0
155
1
int sum=sumArr(arr. SIZE) 문의
0
137
1
4:39 질문입니다.
0
129
1
질문있습니다.
0
105
1
질문있습니다.
0
107
1
9:11 b에는 a이 주소값이 들어갔다고 하는데 *b의 값이 왜 a랑 같은 값이 나오나요?
0
160
1
빌드 실패 오류 질문 드립니다!
0
393
1
추상화와 클래스중 질문
0
175
1
질문사항 있습니다..동작을 안하고 있어요..
0
339
2
질문 드립니다
0
188
1
함수와 구조체 강의 음성이 이상합니다.
0
199
1
분할 컴파일 과정에서의 오류 발생
0
601
2
<<, >> 비트 연산자에 대한 설명이 맞나요?
0
449
2
포인터 연산
0
387
2
비주얼 스튜디오 코드를 사용해도 되나요?
0
803
1
[정수형 자료형과 실수형 자료형] int보다 long이 더 크다고 했는데 왜 같은 값으로 나오는 건가요?
0
664
1





