用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