• 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));
  • 相关阅读:
    C/C++数组名与指针区别深入探索(转)
    mysql 的编译安装
    rpm的问题 ~/.rpmmacros %_rpmlock_path
    GCC中的弱符号与强符号(转)
    关于printf系列函数
    如何修改机器名
    multiple definition of XXXX 的解决
    由无名对象(临时对象)引发的关于“引用”的思考
    关于date中时间字符串的格式
    月薪不同,面试题不同!
  • 原文地址:https://www.cnblogs.com/chuanzi/p/12005918.html
Copyright © 2020-2023  润新知