迭代计算黄金比例

时间:2014-11-20 07:28:56

标签: c math

enter image description here

这是由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,但我觉得它是丑陋的代码。

2 个答案:

答案 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