zoukankan      html  css  js  c++  java
  • 用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           
            }

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

     

     

     

     

     

     

     

  • 相关阅读:
    过滤器
    联系数据库 电话本例子
    连接数据库日志例题
    登录注册 servlet
    Pandas截取列部分字符,并据此修改另一列的数据
    Excel 如何判断某列哪些单元格包含某些字符
    Pandas逐行读取Dateframe并转为list
    Pandas: 使用str.replace() 进行文本清洗
    如何在xlwt中编写多个列的单元格?
    python:循环定义、赋值多个变量
  • 原文地址:https://www.cnblogs.com/afafaa/p/12752111.html
Copyright © 2011-2022 走看看