裴波那契数列

斐波那契数列: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);
});

  

原文地址:https://www.cnblogs.com/caihg/p/9640277.html