基本C ++递归

时间:2016-03-24 15:07:18

标签: c++ recursion

我试图计算系列: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);
}

1 个答案:

答案 0 :(得分:3)

正如其他人所说,使用浮点类型,例如doublefloat

在整数除法中,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;
}

您的代码应使用浮点常量(带小数点)和浮点变量(类型为doublefloat)。

编辑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;
}