이 문제에서는 주어진 급수에 해당하는 두 값 x와 n이 입력으로 제공됩니다. 우리의 과제는 C++를 사용하여 1 + x/2! + x²/3! + … + xⁿ/(n+1)! 의 합을 구하는 프로그램을 작성하는 것입니다.
문제 설명 − 주어진 x와 n 값을 기반으로 급수의 합을 계산해야 합니다. 이 급수에서 i번째 항은 바로 앞 항에 x/i를 곱한 값이 됩니다. 즉, 각 항은 팩토리얼 분모를 가지며 이전 항에서 규칙적으로 파생됩니다.
예제를 통해 문제를 자세히 이해해 보겠습니다.
입력
x = 6, n = 4
출력
29.8
설명
급수의 각 항을 전개하면 다음과 같습니다.
1 + 6/2! + 36/3! + 216/4! + 1296/5! = 1 + 6/2 + 36/6 + 216/24 + 1296/120 = 29.8
해결 접근 방식
급수의 합을 효율적으로 구하기 위해, 매번 팩토리얼을 새로 계산하는 대신 이전 항에 x/i를 곱하는 방식으로 다음 항을 구합니다. 이렇게 하면 반복문 한 번으로 모든 항을 생성할 수 있으며, 각 항을 누적하여 최종 합을 얻습니다.
이 방법의 시간 복잡도는 O(n)으로, 팩토리얼을 직접 계산하는 방식(O(n²))보다 훨씬 효율적입니다.
솔루션을 보여주는 프로그램
예제
#include <iostream>
using namespace std;
float calcSeriesSum(int x, int n){
float sumVal = 1, term = 1;
for(float i = 2; i <= (n + 1); i++){
term *= x/i;
sumVal += term;
}
return sumVal;
}
int main(){
int x = 6, n = 4;
cout<<"급수의 합은 "<<calcSeriesSum(x, n);
return 0;
}
출력
급수의 합은 29.8
코드 설명
calcSeriesSum() 함수는 초기값으로 첫 번째 항인 1을 sumVal과 term에 저장합니다. 이후 반복문이 2부터 n+1까지 진행되면서 term에 x/i를 곱해 다음 항을 만들고, 이를 sumVal에 더합니다. 모든 반복이 끝나면 최종 합이 반환됩니다.