สูตรคณิตศาสตร์
อนุกรม: 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;
}