이 글에서는 재귀(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