Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

재귀(Recursion)를 활용해 문장을 뒤집는 Java 프로그램 구현하기

이 글에서는 재귀(recursion)를 활용하여 문장을 뒤집는 방법을 단계별로 살펴보겠습니다.

재귀란 무엇인가?

재귀 함수(recursive function)란 특정 조건이 충족될 때까지 자기 자신을 반복적으로 호출하는 함수를 의미합니다. 재귀는 항목을 자기 유사적인(self-similar) 방식으로 반복하는 과정으로, 프로그래밍 언어에서 하나의 함수가 동일한 함수 내부에서 자신을 호출할 수 있을 때 이를 재귀 호출(recursive call)이라고 부릅니다.

대부분의 프로그래밍 언어는 스택(stack)을 기반으로 재귀를 구현합니다. 일반적으로 어떤 함수(호출자, caller)가 다른 함수(피호출자, callee) 또는 자기 자신을 호출하면, 호출자는 실행 제어권을 피호출자에게 넘기게 됩니다. 이 전달 과정에서 필요한 데이터가 호출자로부터 피호출자로 함께 전달되기도 합니다.

입력 및 출력 예시

예를 들어 아래와 같은 문장을 입력했다고 가정해 보겠습니다.

입력

Enter the sentence : Have a nice evening

출력

The reversed input is: gnineve ecin a evaH

알고리즘

Step 1 - 시작
Step 2 - my_input과 my_result라는 두 개의 문자열 변수 선언
Step 3 - 사용자로부터 값을 입력받거나 값을 직접 정의
Step 4 - 재귀 함수 'reverseString'을 정의. 이 함수는 문자열을 입력받아 마지막 위치의 문자를 반환
Step 5 - 'my_input' 값이 빈 문자열이 아닐 때까지 함수를 재귀적으로 호출
Step 6 - 재귀 함수를 호출하며 'my_input' 값을 전달하고 반환값을 저장
Step 7 - 결과 출력
Step 8 - 종료

예제 1: 사용자 입력을 받아 처리하는 경우

아래 예제는 Scanner 객체를 사용해 사용자가 직접 문장을 입력하면, 재귀 함수를 통해 해당 문장을 뒤집어 출력합니다.

import java.util.Scanner;
public class Reverse {
   public static void main(String[] args) {
      String my_input, my_result;
      System.out.println("Required packages have been imported");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("A reader object has been defined ");
      System.out.print("Enter the sentence : ");
      my_input = my_scanner.nextLine();
      my_result = reverseString(my_input);
      System.out.println("The reversed input is: " + my_result);
   }
   public static String reverseString(String my_input) {
      if (my_input.isEmpty())
        return my_input;
      return reverseString(my_input.substring(1)) + my_input.charAt(0);
   }
}

실행 결과

Required packages have been imported
A reader object has been defined
Enter the sentence : Have a nice evening
The reversed input is: gnineve ecin a evaH

예제 2: 문자열이 미리 정의된 경우

아래 예제는 문자열이 코드 안에 미리 정의되어 있는 경우입니다. 정의된 값을 그대로 읽어와 콘솔에 뒤집힌 결과를 출력합니다.

public class Reverse {
   public static void main(String[] args) {
      String my_input, my_result;
      my_input = "Have a nice evening";
      System.out.println("The string is defined as :" +my_input);
      my_result = reverseString(my_input);
      System.out.println("The reversed input is: " + my_result);
   }
   public static String reverseString(String my_input) {
      if (my_input.isEmpty())
         return my_input;
      return reverseString(my_input.substring(1)) + my_input.charAt(0);
   }
}

실행 결과

The string is defined as :Have a nice evening
The reversed input is: gnineve ecin a evaH

핵심 원리 정리

위 재귀 함수의 동작 원리는 간단합니다. 먼저 문자열이 비어 있는지 확인하여 빈 문자열이면 그대로 반환하는 종료 조건(base case)을 설정합니다. 그다음 substring(1)을 사용해 첫 번째 문자를 제외한 나머지 문자열로 자기 자신을 재귀 호출하고, 마지막에 첫 번째 문자(charAt(0))를 결과 뒤에 붙입니다. 이 과정이 반복되면서 문자열이 한 글자씩 뒤에서부터 쌓이게 되어 최종적으로 완전히 뒤집힌 문장이 만들어집니다.