zoukankan      html  css  js  c++  java
  • js计算斐波那契数列

     
    /**
     * 要求:使用js计算斐波那契数列,时间复杂度尽量低。输入数字n,输出数列内第n位的值
     * 
     * 斐波那契数列如下:
     * 1、2、3、5、8、13、21、34、
     * 
     * 结果验证:
     * 输入8、输出34
     * 输入10、输出89
     * 输入20、输出10946
     */

    // 无缓存版本
    var calFibonacci = function(n) {
      // 迭代次数统计
      var count = 0;
      function _calFibonacci(n) {
        // 迭代次数统计
        count++;
        if (n === 1) return 1;
        if (n === 2) return 2;

        return _calFibonacci(n-1) + _calFibonacci(n-2);
      }
      var result =  _calFibonacci(n);
      // 输出迭代次数统计
      console.log(count);
      return result;
    };

    /**
     * 讨论:
     *  递归有什么优点和缺点?
     */


    // 缓存版本
    var calFibonacci = function(n) {
      var cache = {};
      // 迭代次数统计
      // var count = 0;
      function _calFibonacci(n) {
        // 迭代次数统计
        // count++;
        if (n === 1) return 1;
        if (n === 2) return 2;

        var first;
        if (cache[n-1]) {
          first = cache[n-1];
        } else {
          first = _calFibonacci(n-1);
          cache[n-1] = first;
        }
        
        var second;
        if (cache[n-2]) {
          second = cache[n-2];
        } else {
          second = _calFibonacci(n-2);
          cache[n-2] = second;
        }

        return first + second;
      }
      var result =  _calFibonacci(n);
      // 输出迭代次数统计
      // console.log(count);
      return result;
    };

    console.log(calFibonacci(20));
  • 相关阅读:
    Discuz!X3.1插件创建与配置
    Discuz!X3.1如何设置下载附件扣除积分
    Discuz!X3.1标签使用(二)
    Discuz!X3.1标签使用(一)
    Discuz!X3.1后台操作技巧(整合)
    Discuz!X3.1数据库的操作(三)
    Discuz!X3.1数据库的操作(二)
    Discuz!X3.1数据库的操作(一)
    Discuz!X3.2导航下拉菜单样式修改
    【discuz x3】源代码中的sql调用
  • 原文地址:https://www.cnblogs.com/chuanzi/p/12005918.html
Copyright © 2011-2022 走看看