斐波那契

2021-10-22  本文已影响0人  ynwshy

创建数组

function fbnq1(No) {
    let arr = [1, 1];
    if (No <= 2) return 1;
    // 第5个数 算出 下标为4的数 数组长度为5
    while (arr.length < No) {
        // 获取第几项那就计算最后一项的值 直到数组有几项
        // 计算倒数第一项和倒数第二项的和 产生新的值
        arr.push(arr[arr.length - 1] + arr[arr.length - 2]);
    }
    //返回计算好的最后一项
    return arr;
    // return arr[arr.length - 1];
}

console.log(fbnq(1)); // 1
console.log(fbnq(2)); // 1
console.log(fbnq(3)); // 2
console.log(fbnq(4)); // 3
console.log(fbnq(5)); // 5
console.log(fbnq(6)); // 8
console.log(fbnq(7)); // 13
console.log(fbnq(8)); // 21
console.log(fbnq(9)); // 34
console.log(fbnq(10)); // 55
console.log(fbnq(11)); // 89

递归方式

function fbnq(No) {
    if (No <= 2) return 1;
    // 第一个数,第二个数 , 当前是第几个数字
    function fn(last1, last2, curNo) {
        if (curNo >= No) {
            return last2;
        } else {
            // 原来的第二个数作为第一个数
            // 加和的最新数作为第二个数
            // 递归计算下一个数 + 1
            return fn(last2, last1 + last2, curNo + 1);
        }
    }
    return fn(1, 1, 2);
}
上一篇 下一篇

猜你喜欢

热点阅读