Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java หาผลรวมอนุกรม 1/1! + 2/2! + 3/3! + ... + n/n!

สูตรคณิตศาสตร์

อนุกรม: S(n) = Σ(i=1 to n) i/i! ค่าเข้าใกล้ e - 1 ≈ 1.71828 เมื่อ n ใหญ่

ตัวอย่างโค้ด

public class Demo {
    public static double patternSum(double n) {
        double sum = 0.0;
        double factorial = 1.0;
        
        for (int i = 1; i <= n; i++) {
            factorial *= i;           // i!
            sum += i / factorial;     // i/i!
        }
        return sum;
    }
    
    public static void main(String[] args) {
        double n = 6;
        System.out.println("The sum of the series is: " + patternSum(n));
    }
}

ผลลัพธ์

The sum of the series is: 2.7166666666666663

คำอธิบาย: คำนวณ factorial แบบสะสม (incremental) ไม่ต้องคำนวณใหม่ทุกครั้ง Complexity: O(n) time, O(1) space

การเพิ่มประสิทธิภาพ

// ใช้ double สำหรับค่าทศนิยม แต่ระวัง precision เมื่อ n ใหญ่
// factorial เติบโตเร็วมาก 20! > Long.MAX_VALUE
// สำหรับ n > 20 ควรใช้ BigDecimal หรือคำนวณแบบ log
public static BigDecimal patternSumBig(int n) {
    BigDecimal sum = BigDecimal.ZERO;
    BigDecimal factorial = BigDecimal.ONE;
    for (int i = 1; i <= n; i++) {
        factorial = factorial.multiply(BigDecimal.valueOf(i));
        sum = sum.add(BigDecimal.valueOf(i).divide(factorial, 50, RoundingMode.HALF_UP));
    }
    return sum;
}