Mar*_*oon -2 c++ recursion sequence numerical-computing
我的代码应该计算序列的第 100 个元素$x_0=1 ; x_i=\dfrac{x_{i-1}+1}{x_{i-1}+2}, i=1,2, \ldots$
我写了迭代和递归函数,但结果不相等。是因为丢失了小数吗?
这是我的驱动程序代码。文件中的数据是 i=100。
int main()
{
int i;
ifstream f ("data.txt");
f >> i;
double x_0= 1.00;
double x_100 = l(x_0, i);
ofstream g ("results.txt", ios::app);
g <<"\n100th element (by looping): " << x_100;
x_100 = r(x_0);
g <<"\n100th element (by recursion): " << x_100;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
l()是迭代函数,
r()是递归函数
double l(double x, int i)
{
for (int j = 0; j<i ; j++){
x = (x + 1)/(x+2);
}
return x;
}
double r(double x)
{
if (x == 0)
return 1;
else
return (r(x-1) + 1) / (r(x-1) + 2);
}
Run Code Online (Sandbox Code Playgroud)
这是结果
100th element (by looping): 0.618034
100th element (by recursion): 0.666667
Run Code Online (Sandbox Code Playgroud)
我是你做的递归函数
(r(x-1) + 1) / (r(x-1) + 2)
Run Code Online (Sandbox Code Playgroud)
等于x == 1.0
(r(1-1) + 1) / (r(1-1) + 2)
Run Code Online (Sandbox Code Playgroud)
这当然等于
(r(0) + 1) / (r(0) + 2)
Run Code Online (Sandbox Code Playgroud)
因为r(0)将返回1该方程是
(1.0 + 1) / (1.0 + 2)
Run Code Online (Sandbox Code Playgroud)
没有进一步的递归。结果2.0 / 3.0是0.66667。
l另一方面,迭代函数将进行100迭代,其中每次迭代都会改变x,使其变得越来越小。
这些函数只是做不同的事情,导致不同的结果。