C++ 程序:求调和级数的和


在这个问题中,我们给定三个数字 a、d 和 n。我们的任务是创建一个 C++ 程序来求调和级数的和。

调和级数是一个级数,其倒数构成一个等差级数。即,如果对于一个调和级数 A1、A2、A3… An,存在一个等差级数 1/A1、1/A2、1/A3。

因此,一般的调和级数为

1/a, 1/(a+d), 1/(a+2d), … 1/(a + nd)

其中 1/a 是第一项。而 d 是反向等差级数的公差。

问题描述 - 在这里,我们将给出调和级数的第一项 a、公差 d 和项数 n,我们需要找到它的和。

让我们举个例子来理解这个问题

输入

a = 3, d = 2, n = 5

输出

0.878211

解释

调和级数为 ⅓、⅕、1/7、1/9、1/11。

Sum = ⅓ + ⅕ + 1/7 + 1/9 + 1/11 = 0.878211

解决方案

我们将迭代到第 n 项,找到调和级数每一项的值,并将其加到 sumVar 中。最后返回 sumVal。

算法

初始化 - sumVal = 0,term = 0;

  • 步骤 1 - 循环 i 从 1 到 n
    • 步骤 1.1 - 找到该项,term = 1/( a + (i-1)*(d)。
  • 步骤 1.2 - 更新 sumVal,sumVal += term。
  • 步骤 2 - 打印 sumVal。

程序示例,演示解决方案的工作原理

示例

 在线演示

#include <iostream>
using namespace std;
float findSeriesSum(int a, int d, int n){
   float sumVal = 0;
   float term = 0;
   for(float i = 1; i <= n; i++){
      term = (1.0)/(float)(a + (i-1)*d);
      sumVal += term;
   }
   return sumVal;
}
int main(){
   int n = 5, a = 3, d = 2;
   cout<<"The sum of HP is "<<findSeriesSum(a, d, n);
   return 0;
}

输出

The sum of HP is 0.878211

另一种方法可以使用递归函数来求和。

程序示例,演示解决方案的工作原理

示例

 在线演示

#include <iostream>
using namespace std;
float findSeriesSum(int a, int d, int n){
   if(n == 1){
      return (float)(1.0)/a;
   }
   float term = (1.0)/ (float)(a + (n-1)*d);
   return term + findSeriesSum(a, d, n-1);
}
int main(){
   int n = 5, a = 3, d = 2;
   cout<<"The sum of HP is "<<findSeriesSum(a, d, n);
   return 0;
}

输出

The sum of HP is 0.878211

更新于: 2020年9月16日

790 次浏览

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告