재귀(Recursion) 기법을 사용하여 문자열을 뒤집어야 하는 경우, 사용자가 직접 정의한 메서드와 재귀 호출을 함께 활용하게 됩니다.
재귀는 하나의 큰 문제를 잘게 나눈 작은 단위의 결과를 먼저 계산한 뒤, 이 조각들을 차례로 결합하여 최종적으로 전체 문제의 해답을 만들어 내는 방식으로 동작합니다.
재귀로 문자열을 뒤집는 원리
문자열 뒤집기의 핵심 아이디어는 간단합니다. 문자열의 첫 번째 문자를 분리해 뒤쪽으로 보내고, 나머지 부분에 대해 같은 작업을 반복하는 것입니다. 문자열이 빈 값이 되면 재귀 호출이 멈추면서 각 단계의 결과가 역순으로 연결됩니다.
예제 코드
아래는 파이썬으로 구현한 데모입니다.
def reverse_string(my_string):
if len(my_string) == 0:
return my_string
else:
return reverse_string(my_string[1:]) + my_string[0]
my_str = str(input("Enter the string that needs to be reversed : "))
print("The string is :")
print(my_str)
print("The reversed string is :")
print(reverse_string(my_str))실행 결과
Enter the string that needs to be reversed : Williw The string is : Williw The reversed string is : williW
코드 설명
- 'reverse_string'이라는 이름의 메서드를 정의하며, 이 함수는 문자열을 매개변수로 받습니다.
- 함수는 먼저 문자열의 길이를 검사합니다. 길이가 0이 아니라면, 문자열의 첫 번째 문자를 제외한 나머지 부분에 대해 자기 자신을 다시 호출하고, 그 반환 결과 뒤에 첫 번째 문자를 이어 붙입니다.
- 길이가 0인 경우(재귀의 종료 조건)에는 빈 문자열을 그대로 반환하여 재귀 호출을 마무리합니다.
- 함수 외부에서는 사용자에게 뒤집을 문자열을 입력받습니다.
- 입력받은 문자열을 콘솔에 출력합니다.
- 해당 문자열을 인자로 전달하여 재귀 함수를 호출합니다.
- 뒤집힌 문자열이 최종 결과로 콘솔에 출력됩니다.
재귀 호출 과정 예시
입력값이 "Williw"일 때 함수는 다음과 같이 동작합니다.
- reverse_string("illiw") + "W"
- reverse_string("lliw") + "i" + "W"
- reverse_string("liw") + "l" + "i" + "W"
- reverse_string("iw") + "l" + "l" + "i" + "W"
- reverse_string("w") + "i" + "l" + "l" + "i" + "W"
- reverse_string("") + "w" + "i" + "l" + "l" + "i" + "W" → "williW"
참고 사항
재귀 방식은 개념을 이해하기에 좋지만, 문자열 길이가 길어지면 함수 호출이 그만큼 많아져 성능이 떨어질 수 있습니다. 또한 파이썬은 기본 재귀 깊이 제한(약 1,000회)이 있으므로, 실무에서는 슬라이싱(my_string[::-1])이나 반복문을 활용한 방식이 더 효율적일 수 있습니다.