斐波那契数列 js实现方式

450 阅读1分钟

// 1, 1, 2, 3, 5, 8, 13 ...

方法一

1)当n等于1或2时值为1
2)假设有一个数列arr = [1, 1, 2, 3, 5, 8, 13 ...],则n项为arr[n - 1], n - 1项为arr[n - 2], n - 2 项为 arr[n - 3];
3)且n项的值为前两项的和,则n项的值为arr[n - 3] + arr[n - 2];
const fibo = n => {
    // 判断输入的值是否有效,也可以抛出异常
    if (typeof n !== 'number' || !n) return 0; 
    let arr = [1, 1];
    for (let i = 3; i <= n; i++) arr.push(arr[i - 3] + arr[i - 2]);
    return arr[n - 1];
}

方法二

方法一实际会生成一个n项的数列,而实际只需要获取n项的值即可,故当n大于2时可以将数组中的值替换掉
    const fibo = n => {
        // 判断输入的值是否有效,也可以抛出异常
        if (typeof n !== 'number' || !n) return 0; 
        let arr = [1, 1];
        if (n > 2) { // 仅当n大于2时需要替换arr中的值
          // 循环的时候将上一次末尾的值替换掉头部的值,而尾部的值则等于上一次数组中两项之和
          for (let i = 3; i <= n; i++) arr = [arr[1], arr[0] + arr[1]]; 
          return arr[1]; // n项的值
        } 
        return 1; // n = 1 || 2 
    }