我试图计算系列:1/2 + 1/3 + 1/4 + 1/5 + ...
但我的输出有问题:
插入将计算多少个系列号码:3 //我输入3
总计= 1 //这是问题,输出应显示= 1.8333
我的节目
#include <iostream>
#include <math.h>
using namespace std;
int recursion ( int n );
int main ()
{
int n;
cout << "Insert how many number will be counted : ";cin >> n;
cout << "Total = " << recursion(n);
}
int recursion (int a)
{
int result;
if ( a >= 1 )
{
result = 1;
}
else
{
result = ( pow ( a , -1 ) + recursion ( pow ( ( a - 1 ) , -1 ) ) );
}
return (result);
}
答案 0 :(得分:3)
正如其他人所说,使用浮点类型,例如double
或float
。
在整数除法中,1/3 == 0。
这是一个反复的例子:
const unsigned int NUMBER_OF_TERMS = 100;
double result = 0.0;
double denominator = 2.0;
for (unsigned int i = 0; i < NUMBER_OF_TERMS; ++i)
{
result = result + 1.0 / denominator;
denominator = denomenator + 1.0;
}
您的代码应使用浮点常量(带小数点)和浮点变量(类型为double
或float
)。
编辑1:基本递归
在一些递归的情况下,向后思考解决方案可能有助于实现。
例如,该系列以1.0 / 2.0开头。但是,由于sum操作不依赖于顺序,我们可以从1.0 / 5.0开始并向后工作:
result = 1.0/5.0 + 1.0/4.0 + 1.0/3.0 + 1.0/2.0
这允许分母用作结束递归的条件。
double recursive_sum(double denominator)
{
if (denominator < 2)
{
return 0.0;
}
return recursive_sum(denominator - 1.0)
+ 1.0 / denominator;
}