void reverse_it()
{
char ch;
scanf("%c", &ch);
if (ch == '\n')
return;
else
{
reverse_it();
printf("%c", ch);
}
}
int main()
{
printf("Enter a sentence:\n");
reverse_it();
printf("\n");
return 0;
}
동작 원리
이 함수는 입력 문자를 재귀적으로 읽은 뒤, 가장 마지막 문자를 먼저 출력하는 방식으로 작동합니다.
문자열 끝(줄바꿈 문자 '\n')에 도달할 때까지 재귀 호출을 반복하며 입력을 처리합니다.
줄바꿈 문자에 도달한 이후, 스택이 거꾸로 풀리면서(후입선출 구조) 각 문자가 역순으로 출력됩니다.
실행 과정 (입력: hello)
첫 번째 단계: 재귀 호출로 입력 받기
첫 번째 호출: 입력 문자 h를 받고 reverse_it() 재귀 호출.
두 번째 호출: 입력 문자 e를 받고 reverse_it() 재귀 호출.
세 번째 호출: 입력 문자 l를 받고 reverse_it() 재귀 호출.
네 번째 호출: 입력 문자 l를 받고 reverse_it() 재귀 호출.
다섯 번째 호출: 입력 문자 o를 받고 reverse_it() 재귀 호출.
여섯 번째 호출: 입력 문자 \n(줄바꿈)을 만나 return.
두 번째 단계: 재귀 호출 반환하며 출력
다섯 번째 호출이 끝난 후, printf("%c", ch) 실행 → o 출력.
네 번째 호출이 끝난 후, printf("%c", ch) 실행 → l 출력.
세 번째 호출이 끝난 후, printf("%c", ch) 실행 → l 출력.
두 번째 호출이 끝난 후, printf("%c", ch) 실행 → e 출력.
첫 번째 호출이 끝난 후, printf("%c", ch) 실행 → h 출력.
최종 출력
입력 hello가 역순으로 출력되므로 결과는:
Enter a sentence:
hello
olleh
주요 포인트
머리 재귀:
입력 문자 처리가 끝날 때까지 재귀 호출을 먼저 실행합니다.
현재 문자를 스택에 저장하고 재귀가 끝난 후 출력하므로, 역순 출력이 가능합니다.
종료 조건:
줄바꿈 문자 '\n'을 만나면 재귀 호출이 중단됩니다.
스택 구조:
각 재귀 호출에서 입력된 문자가 스택에 쌓이고, 마지막 호출부터 차례로 출력됩니다.
동작 원리의 시각화
입력: hello\n
스택 상태:
recurse('h')
-> recurse('e')
-> recurse('l')
-> recurse('l')
-> recurse('o')
-> recurse('\n') -> 종료
출력 순서: 'o' -> 'l' -> 'l' -> 'e' -> 'h'