javascript 斐波那契

31 阅读1分钟

image.png

从第3项开始,每一项都等于前两项之和。 我刚开始是这样想的,用一个双层for循环,


//当i=1  j=1   i=2  j=1+1   i=3   j=i+2=5    i=4  j=i+3=7

输出i j 1 1 2 3 5 7 …… 刚开始对上了,但是从7开始就对不上了。

所以换思路:

an=a[n-1]+a[n-2];

如图所示:

z=i+j
每次把i  z  j整体往后挪动一次,z刚好就是i+j,每挪动一次就输出一次z,
就可以遍历3  5  8  13……一直到100以内的斐波那契。但是我们发现它并没有遍历i和j的位置,也就是1  1
所以我们可以再先把z初始化为1,然后先把z的值打印两次,再进行斐波那契

image.png

写如下代码:

var i=1;
    var j=1;

    var z=1;
var n=0;

while(z<=100)

{
    while(n<=1)
    {
        console.log(z+' ');

    n++;

    }

     z=i+j;

     console.log(z+' ');

    i=j;

    j=z;

     }

用js在控制台输出会折叠第二个,以下是相同代码用c和js做对比(): image.png 用document可以把折叠的1输出出来:

image.png

但是我们发现最后z的值为144,大于100. 所以说需要修改:

这是因为虽然while()循环的条件为z<=100,但是在循环内部有一个z=i+j; cout<<z 所以z还是可能大于100的,所以我们应该再加个条件,如果z<100再cout就可以了:

image.png

js 运行结果:

image.png