ㅁㅁㅁ인터넷 뒤적거리고, 책정독해서 깨닳은건데..
제가 올바르게 생각하고 있는건가요?
그냥 (그래..맞아 or 아닌데..이유는 생략하겠다)로 대답좀 해주시면 진짜 감사할것같습니다.
네이버에 올렸는데, 지식인 형들이 안가르쳐줘요..ㅠ
#include <iostream>
using namespace std;
void whileN(int n);
int main()
{
whileN(3);
system(\"PAUSE\");
return 0;
}
void whileN(int n)
{
cout<<\"a = \"<<n<<endl;
if(n<=0)
return;
whileN(n-1);
cout<<\"c = \"<<n<<endl;
}
출력:3 2 1 0 1 2 3 (물론 한줄에 숫자하나씩 나오지만, 편의상 한줄에 적음)
/*
1.메인에서 whileN(3)을 부릅니다.
2.whileN(3)
cout<<\"a = \"<<n<<endl; //여기서 3출력합니다
if(n<=0) //해당사항없으니 넘어갑니다
return;
whileN(n-1); //매개변수 2로해서 처음으로 갑니다
cout<<\"c = \"<<n<<endl; //이놈(3)은 일단 대기합니다. whleN(2)부터 해결하고 봅니다.
3.whileN(2)
cout<<\"a = \"<<n<<endl; //여기서 2출력합니다
if(n<=0) //해당사항없으니 넘어갑니다
return;
whileN(n-1); //매개변수 1로해서 처음으로 갑니다
cout<<\"c = \"<<n<<endl; //이놈(2)은 일단은 대기합니다. whleN(1)부터 해결하고 봅니다.
4.whileN(1)
cout<<\"a = \"<<n<<endl; //여기서 1출력합니다
if(n<=0) //해당사항없으니 넘어갑니다
return;
whileN(n-1); //매개변수 0로해서 처음으로 갑니다
cout<<\"c = \"<<n<<endl; //이놈(1)은 일단은 대기합니다. whleN(0)부터 해결하고 봅니다.
5.whileN(0)
cout<<\"a = \"<<n<<endl; //여기서 0출력합니다
if(n<=0) //걸려들었습니다 return맞고, whileN(n-1)뒤로 이동합니다. 이시점에 n=1입니다
return;
whileN(n-1);//아까 return때문에 이놈은 패스됩니다. 따라서 n은 계속 1입니다.
cout<<\"c = \"<<n<<endl; //1출력합니다. 대기타고 있던 2출력합니다. 대기타고 있던 3출력합니다. 다 나왔으니 끝납니다.
*/
질문1)이렇게 이해하면 되는걸까요?
질문2)대기타고 있는 애들이 저장되는 부분이 스텍이라고 부르는 곳이 맞습니까?
맞든 아니든 일단 넘기기로 했음..
야 뭐 재귀함수로 고민이냐 stack 입출략방식이나 공부하면 되잖아 [핡]
lifo ㄱㄱ [핡]
정확히 말하면 함수 호출할때마다 서로 독립적인 공간이 생긴다.. 원리는 이해하고 있구만
눈에 보이고 확실한걸 좋아하면 Adelposs 같이 스택을 직접 관리해도 좋고, 아니면 콜 스택을 이용해도 된다