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

재귀(Recursion)를 활용해 거듭제곱을 계산하는 Java 프로그램

이 글에서는 재귀(recursion)를 활용해 거듭제곱을 계산하는 방법을 알아봅니다. 재귀 함수란 특정 조건이 충족될 때까지 자기 자신을 반복적으로 호출하는 함수를 의미합니다.

재귀란 무엇인가?

재귀는 대상을 자기 유사적(self-similar) 형태로 반복 처리하는 과정입니다. 프로그래밍 언어에서 어떤 함수가 자기 자신을 다시 호출할 수 있을 때, 이를 재귀 호출(recursive call)이라고 부릅니다.

대다수 프로그래밍 언어는 스택(stack)을 통해 재귀를 구현합니다. 일반적으로 한 함수(호출자)가 다른 함수 또는 자기 자신(피호출자)을 호출하면 호출자는 실행 제어권을 피호출자에게 넘기며, 이 과정에서 인자로 전달되는 데이터가 함께 넘어갈 수 있습니다.

문제 정의

밑(base)과 지수(exponent) 두 정수를 입력받아, 밑을 지수만큼 곱한 거듭제곱 결과를 구하는 것이 목표입니다.

입력 예시:

숫자와 지수 입력: 2와 5

출력 예시:

2^5의 결과는 32입니다.

알고리즘

1단계 - 시작
2단계 - 정수 변수 세 개 선언: my_input(밑), my_power(지수), result(결과)
3단계 - 사용자로부터 값 입력 또는 값 사전 정의
4단계 - 정수 두 개를 매개변수로 받아, 첫 번째 값을 두 번째 값(my_power) 횟수만큼 곱한 결과를 반환하는 재귀 함수 getPower 정의
5단계 - my_power가 0보다 클 때까지 함수를 재귀적으로 호출하며 결과 저장
6단계 - 결과 출력
7단계 - 종료

핵심 원리

getPower 함수는 지수가 0이 아닌 동안 밑 값에 자기 자신의 반환값을 곱하고, 지수를 하나씩 줄여가며 호출을 반복합니다. 지수가 0이 되면 1을 반환하는데, 이것이 바로 재귀의 종료 조건(base case)입니다. 결국 x^n = x × x^(n-1)이라는 수학적 정의를 그대로 코드로 옮긴 구조라고 할 수 있습니다.

예제 1: 사용자 입력을 받는 경우

사용자로부터 숫자와 지수를 직접 입력받아 계산하는 예제입니다. Scanner 클래스를 활용해 콘솔 입력을 처리합니다.

import java.util.Scanner;
public class Power {
   public static void main(String[] args) {
      int my_power, my_input, result;
      my_input = 2;
      my_power = 5;
      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 number : ");
      my_input = my_scanner.nextInt();
      System.out.print("Enter the power value : ");
      my_power = my_scanner.nextInt();
      result = getPower(my_input, my_power);
      System.out.println("The result of " +my_input + "^" + my_power + " is " + result);
   }
   public static int getPower(int my_input, int my_power) {
      if (my_power != 0) {
         return (my_input * getPower(my_input, my_power - 1));
      }
      else {
         return 1;
      }
   }
}

실행 결과

Required packages have been imported
A reader object has been defined 
Enter the number : 2
Enter the power value : 5
The result of 2^5 is 32

예제 2: 값이 미리 정의된 경우

별도의 사용자 입력 없이 정수 값이 코드 안에서 미리 정의되어 있으며, 해당 값을 읽어 결과를 콘솔에 출력합니다.

public class Power {
   public static void main(String[] args) {
      int my_power, my_input, result;
      my_input = 2;
      my_power = 5;
      System.out.println("The number and its power is defined as " +my_input + " and " +my_power);
      result = getPower(my_input, my_power);
      System.out.println("The result of " +my_input + "^" + my_power + " is " + result);
   }
   public static int getPower(int my_input, int my_power) {
      if (my_power != 0) {
         return (my_input * getPower(my_input, my_power - 1));
      }
      else {
         return 1;
      }
   }
}

실행 결과

The number and its power is defined as 2 and 5
The result of 2^5 is 32