📜  node js斐波那契系列 - Javascript(1)

📅  最后修改于: 2023-12-03 15:33:08.043000             🧑  作者: Mango

Node.js斐波那契系列 - Javascript

介绍

斐波那契数列是一个经典的数学问题,它定义为一个数列,其第一项为0,第二项为1,后面每一项都等于前两项的和。

在这个系列中,我们将探讨如何使用Javascript和Node.js编写斐波那契数列。

简单版本

首先,我们来看一个简单版本的斐波那契数列代码:

function fibonacci(n) {
  if (n <= 1) {
    return n;
  }

  return fibonacci(n - 1) + fibonacci(n - 2);
}

console.log(fibonacci(10)); // 输出第10项的值

这个代码使用了递归的方式来计算斐波那契数列,它非常简单易懂。但是,当n变得比较大时,这个代码的性能就会变得非常差,因为它会对相同的数值进行重复计算。

带缓存的版本

为了解决上面的性能问题,我们可以使用缓存来避免重复计算。具体来说,我们可以使用一个数组来保存已经计算过的斐波那契数值,从而避免重复计算。

function fibonacci(n, cache = []) {
  if (n <= 1) {
    return n;
  }

  if (cache[n]) {
    return cache[n];
  }

  cache[n] = fibonacci(n - 1, cache) + fibonacci(n - 2, cache);

  return cache[n];
}

console.log(fibonacci(10)); // 输出第10项的值

这个代码在递归计算斐波那契数列时,会将已经计算过的结果保存到缓存中,下次递归时可以直接从缓存中取出结果,避免重复计算。

动态规划版本

除了带缓存的版本,还可以使用动态规划来计算斐波那契数列。具体来说,我们可以使用一个数组来保存已经计算过的斐波那契数值,从而避免重复计算。

function fibonacci(n) {
  const arr = [];

  for (let i = 0; i <= n; i++) {
    if (i <= 1) {
      arr[i] = i;
    } else {
      arr[i] = arr[i - 1] + arr[i - 2];
    }
  }

  return arr[n];
}

console.log(fibonacci(10)); // 输出第10项的值

这个代码使用循环方式计算斐波那契数列,避免了递归带来的性能问题。

总结

在这个系列中,我们探讨了三种不同的方式来计算斐波那契数列,它们分别是递归、带缓存的递归和动态规划。递归的方式比较容易理解,但是有性能问题;带缓存的递归可以解决性能问题,但是代码比较复杂;动态规划的方式代码更简单,性能也比较不错。根据实际情况,可以选择不同的方式来计算斐波那契数列。