Python
 Computer >> コンピューター >  >> プログラミング >> Python

1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム


この記事では、与えられた問題を解くための解法とアプローチについて詳しく解説します。

問題文

整数 n が入力として与えられたとき、次の級数の合計を求めます。

1/1! + 2/2! + 3/3! + 4/4! + …… + n/n!

ここでは for ループを使用して実装するため、時間計算量は O(n) となります。また、処理効率を高めるポイントとして、階乗の計算を同じループ内で同時に行っている点が挙げられます。

アルゴリズム

以下の手順で級数の合計を求めます。

  1. 合計値 res を 0、階乗値 fact を 1 で初期化します。
  2. i を 1 から n まで順に処理し、fact *= i によって i の階乗を更新します。
  3. res に i / fact を加算していきます。
  4. ループ終了後、res を返り値として返します。

実装例

def sumOfSeries(num):
    res = 0
    fact = 1
    for i in range(1, num+1):
        fact *= i
        res = res + (i / fact)
    return res

n = 100
print("Sum: ", sumOfSeries(n))

出力

Sum: 2.7182818284590455

下図に示すように、すべての変数と関数はグローバルスコープで宣言されています。

1/1! + 2/2! + 3/3! + …… + n/n! の級数の合計を求めるPythonプログラム

数学的な補足

この級数の合計は、n を大きくするにつれて自然対数の底 e(約 2.71828)へ収束することが知られています。実際、上記の出力 2.7182818284590455 は n = 100 の場合の結果であり、e の値とほぼ一致しています。これは級数の各項 i/i! がテイラー展開における e の定義に関係しているためで、非常に興味深い性質です。

まとめ

この記事では、for ループを1回だけ使用して、級数 1/1! + 2/2! + 3/3! + …… + n/n! の合計を効率的に求める方法を学びました。階乗の計算を同一ループ内で行うことで無駄な再計算を避け、時間計算量 O(n) を実現できる点が本手法の大きな利点です。

  1. Pythonで配列の合計を求める方法を徹底解説

    この記事では、Pythonを使って配列(リスト)の合計を求める方法について詳しく解説します。 問題文 問題: 配列が与えられたとき、その配列に含まれるすべての要素の合計を計算してください。 最も基本的なアプローチは、配列全体を走査し、各インデックスの要素を順番に加算していく方法です。ここでは、まず組み込み関数を活用したシンプルな実装例を見ていきましょう。 方法1:組み込み関数 sum() を使う Pythonには、イテラブルなオブジェクトの合計を一発で計算できる組み込み関数 sum() が用意されています。これを使えば、コードは非常に簡潔になります。 サンプルコード # 合計を求める関数 de

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に