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));
  • 相关阅读:
    Linux shell 常用命令记录
    [Bat]批量重命名文件
    【转】java术语(PO/POJO/VO/BO/DAO/DTO)
    TesseractOCR3.0语言库训练步骤
    关于Delphi Rtti对应TDatetime的一些启示
    Ubuntu Server 12.04 安装mysql 5.6.10
    Delphi透明 圆角 窗体 【转】
    奇怪的~用法
    很有用的VS2005插件——SlickEdit
    还不习惯Office 2007
  • 原文地址:https://www.cnblogs.com/chuanzi/p/12005918.html
Copyright © 2011-2022 走看看