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
广告