재귀(Recursion)란 어떤 작업을 자기 자신과 유사한 형태로 반복해서 처리하는 방식을 말합니다. 프로그래밍 언어에서 하나의 함수가 그 함수 내부에서 자기 자신을 다시 호출할 수 있을 때, 이를 해당 함수의 재귀 호출(recursive call)이라고 부릅니다. 아래 예제처럼 재귀 함수를 활용하면 문자열을 손쉽게 뒤집을 수 있습니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
void reverse(string str){
if(str.size() == 0){
return;
}
reverse(str.substr(1));
cout << str[0];
}
int main(){
string a = "Arnold";
cout<<"recursive reverse (Arnold) ::";
reverse(a);
return 0;
}실행 결과
위 C++ 프로그램은 문자열 "Arnold"를 입력으로 받아 재귀 호출을 통해 문자 순서를 거꾸로 출력하며, 최종적으로 "dlonrA"라는 결과를 얻습니다.
Recursive reverse (Arnold):: dlonrA
동작 원리
reverse 함수는 호출될 때마다 문자열의 첫 번째 문자를 제외한 나머지 부분(substr(1))을 인자로 전달하며 자기 자신을 다시 호출합니다. 문자열이 비게 되면 더 이상 호출하지 않고 종료되고, 이후 호출 스택이 되감기면서 각 단계에서 저장해 두었던 첫 번째 문자가 순서대로 출력됩니다. 이러한 구조 덕분에 문자열이 자연스럽게 역순으로 화면에 나타나게 됩니다.