我的代碼應該計算序列的第 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;
}
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);
}
這是結果
100th element (by looping): 0.618034
100th element (by recursion): 0.666667
uj5u.com熱心網友回復:
我你做的遞回函式
(r(x-1) 1) / (r(x-1) 2)
x == 1.0等于_
(r(1-1) 1) / (r(1-1) 2)
這當然等于
(r(0) 1) / (r(0) 2)
并且由于r(0)將回傳1該等式是
(1.0 1) / (1.0 2)
沒有進一步的遞回。結果2.0 / 3.0是0.66667。
l另一方面,迭代函式將進行100迭代,每次迭代都會改變 的值x,使其變得越來越小。
這些函式只是做不同的事情,導致不同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528991.html
標籤:C 递归序列数值计算
