ㅁㅁㅁ
....
void whileN(int n) --------A
{
cout<<n<<endl; ----------출력1
if(n<=0)
return;
whileN(n-1); --------B
cout<<n<<endl; ----------출력2
}
int main()
{
whileN(3)
....}
컴퓨터가 말해준 결과: 3 2 1 0 1 2 3
제가 예상한 결과: 3 2 1 0
이유:
<A>부분에 3이 들어가서, <출력1>에서 \"3\"을 출력하고 if에서 검사받고 해당사항 없으니 다음줄 <B>로 이동.
<B>부분에서 (3-1=2)를 가지고 A부분으로 가서 <출력1>에서 2를 출력하고 if에서 검사받고 다음줄 <B>로 이동.
<B>부분에서 (2-1=1)을 가지고 A부분으로 가서 <출력1>에서 1을 출력하고 검사받고 다음줄 <B>로 이동.
<B>부분에서 0을 가지고 A부분가서 0출력하고 검사받는데 if에서 걸려서 끝.
ㅁㅁㅁ정확히 말해서 (출력2)부분이 어떻게 실행되는지 이해를 못하겠어요.
그냥 성질만 외우고 넘어가면 나중에 이해될까요? 고1때 이해안되던게, 고2때 아 저건 당연한거였구나 했던것처럼..
재귀호출..이해가 안가요..ㅁㅊㅁㅊ
권은성(eskwon)
2011-06-07 01:59
추천 0
댓글 15
다른 게시글
-
유튜브 플레이어 API [1]Tanny Tale..(magicfox) | 11.06.07추천 1
-
개고민중임 [6]ddd(123.111) | 11.06.07추천 0
-
게임 프로그래머는 장벽이 너무 높아.. ㅠㅠ [3]익명(121.133) | 11.06.07추천 0
-
형들 아 [3]난for문이..(enlwj852) | 11.06.07추천 0
-
확률통계 잘하는 횽있어?? [1]병따구리(122.202) | 11.06.07추천 0
-
형들 자바 기본적인거 공부했는데 이제 어케 겅부하나여?ㅁㄴㅇㄹ(183.98) | 11.06.06추천 0
-
횽들 c언어 질문.. [9]1233(112.144) | 11.06.06추천 0
-
형들 질문 [1]00(121.175) | 11.06.06추천 0
-
디시 왤케느림 [1]뇌지랄(nathan) | 11.06.06추천 0
-
avr128 좀하는형들 봐주세 [2]기대믹(keypoint0460) | 11.06.06추천 0
재귀문은 트리 구조 에 대응할때 참 좋지,
return을 한다고 열려있는 모든함수에서 빠져나오는게아닙니다 그리고 return으로 빠져나온 이후에 출력2로 당연히 라인을 내려가서 호출을 할테구요
출력2를빼면 원하시는 결과를 얻을수있겠네여
그럼 3 2 1 0 0 이 나와야 할거같은데...ㅠ 아 전 바본가봐요..ㅎㅎ
아직도 이해안되냐
여하튼 감사합니다
0이 왜2번나와야하는지 간단한 설명점
제일좋은방법은 저런경우 디버그로 시작할때 브레이크밖고 라인 하나씩내려가면서 변수확인하면 확실히들어옵니다.
<A>부분에 3이 들어가서, <출력1>에서 \"3\"을 출력하고 if에서 검사받고 해당사항 없으니 다음줄 <B>로 이동.<B>부분에서 (3-1=2)를 가지고 A부분으로 가서 <출력1>에서 2를 출력하고 if에서 검사받고 다음줄 <B>로 이동. <B>부분에서 (2-1=1)을 가지고 A부분으로 가서 <출력1>에서 1을 출력하고 검사받고 다음줄 <B>로 이동. <B>부분에서 0을 가지고 A부분가서 0출력하고 이프문에서 리턴해서 출력2라인으로 내려가 0출력
내 다시 보고 올게요
아 whileN함수를 나가면 또 whileN함수가있습니다
1스텝씩 디버그하면서 조사식 살펴보는것이 시간절약에는 좋을 겁니다.
마지막에 출력2라인으로 내려가 0출력하고 프로그램종료아닙니다 재귀이기때문에 호출한거 다 나가야합니다 거꾸로 3번 다 나가야죠
갑자기생각난건데 GNex로 모바일개발할때였는데 거기서의 재귀함수는 은성님이 말씀하신것처럼 재귀로 호출 쭉드러갔따가 함수나가는순간 모든함수를 빠져나오는현상이 있긴했엇습니다 gnex개새끼
흠 뭔가 어렴풋이 감이 잡히는것같아요..감사합니다