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));
  • 相关阅读:
    第四次实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章实验报告(构造数据类型)
    第八章实验报告(指针实验)
    第七章实验报告(数组实验)
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/chuanzi/p/12005918.html
Copyright © 2011-2022 走看看