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

재귀 함수를 활용해 숫자의 팩토리얼(계승)을 구하는 Java 프로그램

이 글에서는 재귀(recursion)를 사용하여 숫자의 팩토리얼(계승)을 구하는 방법을 살펴봅니다. 팩토리얼이란 어떤 수와 그보다 작은 모든 수를 차례로 곱한 값을 의미하며, 0보다 큰 자연수에 적용되는 함수입니다. 팩토리얼은 숫자 뒤에 느낌표(!)를 붙여 표기하는데, 예를 들어 5!처럼 나타냅니다.

재귀 함수란 특정 조건이 만족될 때까지 자기 자신을 여러 번 호출하는 함수를 말합니다. 재귀는 항목들을 자기 유사(self-similar)한 방식으로 반복 처리하는 과정으로, 프로그래밍 언어에서 하나의 함수 내부에서 동일한 함수를 다시 호출할 수 있을 때 이를 '재귀 호출'이라고 부릅니다.

많은 프로그래밍 언어는 스택(stack)을 이용해 재귀를 구현합니다. 일반적으로 어떤 함수(호출자)가 다른 함수(피호출자) 또는 자기 자신을 호출할 때마다 호출자는 실행 제어권을 피호출자에게 넘기며, 이 과정에서 일부 데이터가 호출자로부터 피호출자에게 전달되기도 합니다.

아래는 실제 동작 예시입니다.

입력

입력값이 다음과 같다고 가정해 보겠습니다.

Enter the number : 7

출력

기대되는 출력 결과는 다음과 같습니다.

The factorial of 7 is 5040

알고리즘

Step 1 - 시작(START)
Step 2 - 정수형 변수 'my_input'과 long형 변수 'my_result' 선언
Step 3 - 사용자로부터 필요한 값을 입력받거나 값을 직접 정의
Step 4 - 정수를 입력받아, 입력값이 1이 될 때까지 입력값과 그 이전 숫자의 곱을 반환하는 재귀 함수 'factorial' 정의
Step 5 - 재귀 함수를 호출하고 'my_input' 값을 전달한 뒤 반환값을 저장
Step 6 - 결과 출력
Step 7 - 종료(STOP)

예제 1

이 예제에서는 사용자가 프롬프트에 직접 값을 입력하는 방식으로 동작합니다.

import java.util.Scanner;
public class Factorial {
    public static void main(String[] args) {
        int my_input ;
        long 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 number : ");
        my_input = my_scanner.nextInt();
        my_result = factorial(my_input);
        System.out.println("The factorial of " + my_input + " is " + my_result);
    }
    public static long factorial(int my_input){
      if (my_input >= 1)
         return my_input * factorial(my_input - 1);
      else
         return 1;
   }
}

실행 결과

Required packages have been imported
A reader object has been defined
Enter the number : 7
The factorial of 7 is 5040

예제 2

이 예제에서는 정수가 미리 정의되어 있으며, 해당 값에 접근하여 콘솔에 출력합니다.

public class Factorial {
    public static void main(String[] args) {
        int my_input ;
        long my_result;
        my_input = 7;
        System.out.println("The number is defined as " +my_input);
        my_result = factorial(my_input);
        System.out.println("The factorial of " + my_input + " is " + my_result);
    }
   public static long factorial(int my_input){
      if (my_input >= 1)
         return my_input * factorial(my_input - 1);
      else
         return 1;
   }
}

실행 결과

The number is defined as 7
The factorial of 7 is 5040