Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

1/1! + 2/2! + 3/3! + … + n/n! 급수의 합을 구하는 C++ 프로그램


이 글에서는 주어진 급수의 합을 구하는 방법을 알아보겠습니다. 여기서 n 값은 사용자가 직접 입력합니다. 가장 단순한 방법은 팩토리얼 함수를 만들어 루프의 각 단계마다 팩토리얼을 계산하는 것입니다. 하지만 팩토리얼 계산은 일반적인 덧셈에 비해 연산 비용이 크게 드는 작업입니다.

따라서 우리는 이전 단계에서 계산한 팩토리얼 값을 재사용하는 방식으로 효율성을 높일 수 있습니다. 예를 들어 3!는 (3 × 2 × 1)이고, 4!는 4 × 3!입니다. 즉, 3!를 어떤 변수에 저장해 두었다면, 여기에 다음 숫자인 4만 곱하면 곧바로 4!를 얻을 수 있습니다. 이렇게 하면 매번 처음부터 팩토리얼을 다시 계산할 필요가 없습니다.

알고리즘

sum_series_fact(n)

begin
    res := 0
    denominator := 1
    for i in range 1 to n, do
        denominator := denominator * i
        res := res + i / denominator
    done
return res
end

예제 코드

#include<iostream>
using namespace std;

float series_result(int n) {
    float denominator = 1;
    float res = 0;
    for(int i = 1; i<= n; i++) {
        denominator *= i;
        res += float(i/denominator);
    }
    return res;
}

main() {
    int n;
    cout << "항의 개수를 입력하세요: ";
    cin >> n;
    cout << "결과: " << series_result(n);
}

실행 결과

항의 개수를 입력하세요: 5
결과: 2.70833

실행 결과

항의 개수를 입력하세요: 3
결과: 2.5

동작 원리 정리

위 코드에서 핵심 변수는 두 가지입니다.

denominator : 현재까지의 팩토리얼 값(분모)을 저장합니다. 루프가 한 번 돌 때마다 현재 인덱스 i를 곱해 다음 팩토리얼로 갱신됩니다.
res : 각 항(i / i!)을 누적하여 최종 급수의 합을 저장합니다.

예를 들어 n = 5일 때, 급수는 1/1! + 2/2! + 3/3! + 4/4! + 5/5! = 1 + 1 + 0.5 + 0.1667 + 0.04167 ≈ 2.70833이 되어 실행 결과와 일치함을 확인할 수 있습니다. 흥미로운 점은 n이 커질수록 이 급수의 합은 자연상수 e(≈ 2.71828)에 수렴한다는 사실입니다.