这是由a0 = 1和a(n + 1)= sqrt(1 + an)定义的序列,我试图计算它的前40个术语。
#include <stdio.h>
#include <math.h>
int main ()
{
float limit = 1;
for(int i = 0; i < 40; i++ ) {
limit = 1 + sqrt(limit);
printf("%1.21f\n", limit);
}
return(0);
}
输出
2.000000000000000000000
2.414213657379150390625
2.553774118423461914062
2.598053216934204101562
2.611847877502441406250
2.616121292114257812500
2.617442846298217773438
2.617851257324218750000
2.617977619171142578125
....
我的代码正在给我the true value + 1
。我可以从最终答案中减去1,但我觉得它是丑陋的代码。
答案 0 :(得分:4)
我认为你期待这个......
#include <stdio.h>
#include <math.h>
int main ()
{
float limit = 1;
for(int i = 0; i < 40; i++ ) {
limit =sqrt( 1 + limit);//changes here
printf("%1.21f\n", limit);
}
return(0);
}
答案 1 :(得分:1)
你的迭代序列是错误的。
X(n+1) = 1 + sqrt(X(n))
(X(n+1) - 1)^2 = X(n)
(X(n+1))^2 - 2X(n+1) - X(n) + 1 = 0
让lim n->inf X(n) = L
,然后
L^2 - 3L + 1 = 0
所以L是(3+sqrt(5))/2
(正数),它大于黄金比率,即(1+sqrt(5))/2
。