zoukankan      html  css  js  c++  java
  • 裴波那契数列

    斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

    求斐波那契数列第 n 项的值:

    方法一:递归

    function fibonacci(n) {
      if (!Number.isSafeInteger(n) || n < 0) {
        return;
      }
    
      if (n === 0 || n === 1) {
        return n;
      } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
      }
    }
    

    方法二:循环

    function fibonacci(n) {
      if (!Number.isSafeInteger(n) || n < 0) {
        return;
      }
    
      if (n === 0) {
        return n;
      }
    
      var item1 = 1, item2 = 1, sum = 0;
    
      for (var i = 1; i < n; i++) {
        sum = item1 + item2;
        item1 = item2;
        item2 = sum;
      }
    
      return item1;
    }
    

    用 Memoization 函数优化计算:

    function memoization(func) { // Memoization 用于优化比较耗时的计算,通过将计算结果缓存到内存中,这样对于同样的输入值,下次只需要中内存中读取结果
      var cache = {};
    
      return function() {
        var key = arguments[0];
    
        if (cache[key]) {
          return cache[key];
        } else {
          var val = func.apply(this, arguments);
          cache[key] = val;
          return val;
        }
      };
    }
    
    var fibonacci = memoization(function(n) {
      return (n === 0 || n === 1) ? n : fibonacci(n - 1) + fibonacci(n - 2);
    });
    

      

  • 相关阅读:
    如何学习linux编程
    SharpMap学习9调侃WebGIS
    蛮力法01
    SharpMap学习10比例尺
    蛮力法03
    系统学习Linux11点建议
    蛮力算法02
    大地坐标系
    Windows 7下删除右键新建菜单项的多余选项
    GIS中的坐标系相关概念
  • 原文地址:https://www.cnblogs.com/caihg/p/9640277.html
Copyright © 2011-2022 走看看