#include <stdio.h>
void reverse(char *line){
char ch=*line;
if(ch==0) return;
reverse(++line);
printf("%c",ch);
}
int main() {
reverse("abcd");
return 0;
}
=============================================
위의 프로그램은 질문자가 질문한 프로그램과 동일한 일을 하는 프로그램입니다.
이제 설명을 시작해 보겠습니다.
main에서 reverse("abcd");를 호출합니다.
reverse(char *line)이 시작됩니다. 이때 line은 문자열 "abcd"의 시작위치를 가리킵니다.
ch는 'a'가 됩니다. 'a'는 0(널문자)이 아닙니다.
reverse[1](++line)이 호출됩니다. 이때 line은 문자열 "bcd"의 시작위치를 가리킵니다.
reverse[1](char *line[1])이 시작됩니다.
ch[1]은 'b'가 됩니다. 'b'는 0(널문자)이 아닙니다.
reverse[2](++line[1])이 호출됩니다. 이때 line[1]은 문자열 "cd"의 시작위치를 가리킵니다.
reverse[2](char *line[2])가 시작됩니다.
ch[2]는 'c'가 됩니다. 'c'는 0(널문자)이 아닙니다.
reverse[3](++line[2])이 호출됩니다. 이때 line[2]는 문자열 "d"의 시작위치를 가리킵니다.
reverse[3](char *line[3])이 시작됩니다.
ch[3]은 'd'가 됩니다. 'd'는 0(널문자)이 아닙니다.
reverse[4](++line[3])이 호출됩니다. 이때 line[3]은 문자열 ""의 시작위치를 가리킵니다.
reverse[4](char *line[4])가 시작됩니다.
ch[4]는 '\0'가 됩니다. 널문자입니다.
reverse[4]는 종료되어 리턴이 일어납니다.
아직 reverse[3]을 실행중에 있습니다.
ch[3]을 찍어야 합니다. ************************ 드디어 'd'가 출력되었읍니다.
reverse[3]이 종료됩니다.
아직 reverse[2]를 실행중에 있습니다.
ch[2] 를 찍어야 합니다. ************************** 그리고 'c'가 출력됩니다.
reverse[2]가 종료됩니다.
아직 reverse[1]을 실행중에 있습니다.
ch[1]을 찍어야 합니다. ***************************** 그리고 'b'가 출력됩니다.
reverse[1]이 종료됩니다.
아직 reverse를 실행중에 있읍니다.
ch를 찍어야 합니다. ********************************** 마침내 'a'가 출력됩니다.
reverse가 종료됩니다.
이제 메인으로 돌아갑니다.
'알고리즘, 자료구조 > 자료구조' 카테고리의 다른 글
10진수를 16진수로 변환 (0) | 2012.03.27 |
---|---|
순열 permutation (0) | 2012.03.27 |
순환호출 (재귀호출) 기초3 (0) | 2011.12.10 |
요세푸스의 문제 [순환호출을 잘못 쓰면 어떻게 되나?] (0) | 2011.12.03 |
순환호출 (재귀호출) 기초2 (0) | 2011.12.03 |