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

자바로 수열의 합 구하기: 1/1! + 2/2! + 3/3! + … + n/n!

이번 글에서는 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)의 시간 복잡도로 효율적으로 동작합니다. 이러한 방식은 피보나치 수열 등 반복적인 누적 연산이 필요한 다양한 수학 문제에도 응용할 수 있습니다.