C++ 基本C++;递归
我试图数一数:1/2+1/3+1/4+1/5+…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
但我的输出有问题: 插入将统计的序列号数量: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?