其他分享
首页 > 其他分享> > 用JS表示斐波拉契数列

用JS表示斐波拉契数列

作者:互联网

这个是我面试的时候遇到的一道面试题,当时面试官要我共享屏幕,以便看到我的编码过程,我虽然之前了解过,但是印象不深,久而久之就忘记了,所以,突然一下叫我写,理所当然也就没有写出来。不过让我意识到,很多公司对于底层原理和基础性的东西要求比较高,写代码的过程并不仅仅是赶项目的过程,也应该是记录思维变化的过程。所以,我对它做了一个整理。

斐波拉契数列,最开始是数学家列昂纳多·斐波那契以兔子繁殖的例子引进:一对大兔子每个月生一对小兔子。每对小兔子一个月后变成大兔子,再过一个月也开始生小兔子,假设出生的兔子都不死亡,那么,一年后有多少兔子?

兔子繁殖对数记录
月份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
大兔子对数 1 1 2 3 5 8 13 21 34 55 89 144
小兔子对数 0 1 1 2 3 5 8 13 21 34 55 89

从表中可以可看出:

每个月小兔子对数=上个月大兔子对数

每个月大兔子对数=上个月大兔子对数+上个月小兔子对数

由此,以上两个结论可得:

每个月大兔子对数=上个月大兔子对数+上上个月大兔子对数

一年后兔子数=144+89=233

所以,从第三月开始,每一月大兔子对数都等于前两个月的大兔子对数之和。而每个月大兔子对数所形成的数列,就是斐波拉契数列。

用JS代码表示:

 // 方式一:递归
        function fn(n) {
            if (n == 1 || n == 2) {
                return 1
            } else {
                return fn(n - 1) + fn(n - 2)
            }
        }
// 方式二:递归(三元运算符)
        function fn(n) {
            return n < 2 ? n : fn(n - 1) + fn(n - 2)    
        }
// 方式三:迭代
        function fn(n) {
            let a1=1
            let a2=1
            let a3
            let arr=[a1,a2]
            for(i=3;i<n;i++){
                a3= a2+a1
                a1=a2
                a2=a3
                arr.push(a3)
            }
            return arr           
        }

当然,如果只是适用于兔子繁殖例子,斐波拉契数列可能就不会引起这个多的关注。除了适用于兔子繁殖的例子,还适用于植物界的花瓣数,现在社会上的股市等例子。

 

 

 

 

 

 

 

 

标签:数列,波拉,兔子,JS,let,小兔子,对数,fn
来源: https://www.cnblogs.com/afafaa/p/12752111.html