Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基本C++;递归_C++_Recursion - Fatal编程技术网

C++ 基本C++;递归

C++ 基本C++;递归,c++,recursion,C++,Recursion,我试图数一数:1/2+1/3+1/4+1/5+… 但我的输出有问题: 插入将统计的序列号数量:3//I am input 3 Total=1//这就是问题所在,输出应显示为=1.8333 我的节目 #include <iostream> #include <math.h> using namespace std; int recursion ( int n ); int main () { int n; cout << "Insert how

我试图数一数:1/2+1/3+1/4+1/5+…
但我的输出有问题:

插入将统计的序列号数量:3//I am input 3
Total=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);
}
#包括
#包括
使用名称空间std;
int递归(intn);
int main()
{
int n;
cout>n;
正如其他人所说,可以使用浮点类型,例如
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 recursive_sum(double denominator)
{
  if (denominator < 2)
  {
    return 0.0;
  }
  return recursive_sum(denominator - 1.0)
         + 1.0 / denominator;
}
双递归求和(双分母)
{
if(分母<2)
{
返回0.0;
}
返回递归求和(分母-1.0)
+1.0/分母;
}
正如其他人所说,使用浮点类型,例如
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 recursive_sum(double denominator)
{
  if (denominator < 2)
  {
    return 0.0;
  }
  return recursive_sum(denominator - 1.0)
         + 1.0 / denominator;
}
双递归求和(双分母)
{
if(分母<2)
{
返回0.0;
}
返回递归求和(分母-1.0)
+1.0/分母;
}

您的代码只有
int
s,您希望它如何打印浮点数?使用
double
float
代替,告诉您的问题与递归无关的一种方法是查看它,然后检查您的问题与递归无关。(或者,提取一个根本不涉及递归的简单示例,看看您的计算结果仍然是整数。)原因是1/2,1/3…在整数数学中都是0。而且,根据递归的结束条件,没有递归:如果a的值大于或等于1(总是这样!)只需返回1,否则执行递归不使用pow(x,-1)
,因为它是一种浪费。使用除法,减少开销,即1.0/2.0,1.0/3.0。您的代码只有
int
s,您希望它如何打印浮点数?使用
double
float
而不是一种判断您的问题与递归无关的方法是查看它,然后检查您的问题是否与递归无关em与递归无关。(或者,提取一个根本不涉及递归的简单示例,看看您的计算结果仍然是整数。)原因是1/2,1/3…在整数数学中都是0。而且,根据递归的结束条件,没有递归:如果a的值大于或等于1(总是这样!)只需返回1,否则执行递归不要使用
pow(x,-1)
,因为它是一种浪费。使用除法,减少开销,即1.0/2.0,1.0/3.0。为什么
返回0.0
如果分母<2?我返回0.0,因为它是第一个起始值。根据您的问题,该系列以1.0/2.0开始,而不是1.0。还要注意,函数是(递归)调用的使用
分母-1.0
,这意味着最终,分母将小于2.0。为什么不返回0.5?当分母<2时,那么值是1.0/2.0,1.0/2.0的结果是0.5而不是0.0,对吗?如果分母<2,为什么
返回0.0
?我返回0.0,因为它是第一个起始值。从你的问题来看,是e series从1.0/2.0开始,而不是1.0。还请注意,函数是用
分母-1.0
调用的(递归),这意味着最终分母将小于2.0。为什么不返回0.5?当分母<2时,值是1.0/2.0,1.0/2.0的结果是0.5而不是0.0?