이번 글에서는 1/1! + 2/2! + 3/3! + 4/4! + … + n/n! 형태의 수열에서 n까지의 합을 구하는 자바 프로그램을 소개합니다.
수열의 이해
이 수열은 각 항마다 분자가 i이고, 분모가 i의 팩토리얼(i!)인 형태입니다. 예를 들어 n = 6일 경우 다음과 같이 계산됩니다.
1/1! + 2/2! + 3/3! + 4/4! + 5/5! + 6/6!
예제 코드
import java.io.*;
import java.lang.*;
public class Demo{
public static double pattern_sum(double val){
double residual = 0, factorial_val = 1;
for (int i = 1; i <= val; i++){
factorial_val = factorial_val * i;
residual = residual + (i / factorial_val);
}
return (residual);
}
public static void main(String[] args){
double val = 6;
System.out.println("The sum of the series is : " + pattern_sum(val));
}
}실행 결과
The sum of the series is : 2.7166666666666663
코드 동작 원리
위 프로그램에는 Demo라는 이름의 클래스가 있으며, 그 안에 pattern_sum이라는 메서드가 정의되어 있습니다. 이 메서드는 double 타입의 값을 매개변수로 받아, 1부터 해당 값까지 반복하면서 각 항 (i / i!)을 누적하여 수열의 합을 계산합니다.
핵심 로직은 다음과 같습니다.
- factorial_val: 반복문이 진행될 때마다 이전 팩토리얼 값에 현재 인덱스 i를 곱해 i!를 효율적으로 계산합니다.
- residual: 각 반복에서 (i / factorial_val) 값을 더하며 최종 합을 저장합니다.
main 메서드에서는 n값을 6으로 정의한 뒤, 이 값을 인자로 전달하며 pattern_sum 메서드를 호출합니다. 그리고 반환된 결과를 콘솔에 출력합니다.
정리
팩토리얼을 매번 처음부터 다시 계산하지 않고 이전 결과를 재활용하기 때문에, 이 알고리즘은 O(n)의 시간 복잡도로 효율적으로 동작합니다. 이러한 방식은 피보나치 수열 등 반복적인 누적 연산이 필요한 다양한 수학 문제에도 응용할 수 있습니다.