C++で級数 1 + x/2! + x^2/3! + … + x^n/(n+1)! の和を求めるプログラム
この問題では、指定された級数に対応する2つの値 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 + 3 + 6 + 9 + 10.8
= 29.8
解法アプローチ
級数の和を求めるには、各項を前の項に x/i を掛けることで順番に計算していきます。具体的な手順は以下の通りです。
- 初項(sumVal)と現在の項(term)を 1 で初期化します。
- i を 2 から n+1 までループさせ、各ステップで term に x/i を掛けます。
- 計算した term を sumVal に加算していきます。
- ループ終了後の sumVal が級数の和となります。
この方法では階乗を毎回計算する必要がなく、時間計算量 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
まとめ
この記事では、C++を使って級数「1 + x/2! + x²/3! + … + xⁿ/(n+1)!」の和を求める方法を紹介しました。ポイントは、階乗を直接計算せず、前の項に x/i を掛けることで次の項を導出することです。これにより無駄な計算を省き、シンプルかつ高速な実装が実現できます。
-
C++で二分木の最も深い葉ノードの値の合計を求める方法
はじめに二分木(バイナリツリー)が与えられたとき、その中で最も深い位置にある葉ノード(deepest leaves)の値の合計を求めることを考えます。例えば、次のような二分木があるとします。この場合、最も深い葉ノードは 7 と 4 であり、出力は 11 になります。解法のアプローチこの問題は、深さ優先探索(DFS)を用いて各レベルごとのノードの値の合計を記録し、最後に最大深度に対応する合計を取得することで解けます。具体的には、以下の手順に従います。レベルごとの合計を保持するマップ m と、最大深度を記録する変数 maxDepth を定義するノードとレベルを受け取る再帰メソッド solve()
-
1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム
この記事では、与えられた問題を解くための解法とアプローチについて詳しく解説します。 問題文 整数 n が入力として与えられたとき、次の級数の合計を求めます。 1/1! + 2/2! + 3/3! + 4/4! + …… + n/n! ここでは for ループを使用して実装するため、時間計算量は O(n) となります。また、処理効率を高めるポイントとして、階乗の計算を同じループ内で同時に行っている点が挙げられます。 アルゴリズム 以下の手順で級数の合計を求めます。 合計値 res を 0、階乗値 fact を 1 で初期化します。 i を 1 から n まで順に処理し、fact *= i に