Skip to content
On this page

509. 斐波那契数

原题链接:LeetCode 509. 斐波那契数

题目描述

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:

n

示例 2:

**输入:**n = 3 **输出:**2 **解释:**F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

**输入:**n = 4 **输出:**3 **解释:**F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

- `0 <= n <= 30`

难度: Easy


题解代码

javascript
/**
 * @param {number} N
 * @return {number}
 */
// 递推
const fib = N => {
    let cache = []

    for (let i = 0; i <= N; i++) {
        if (i < 2) {
            cache[i] = i
        } else {
            cache[i] = cache[i - 1] + cache[i - 2]
        }
    }
    return cache[N]
}

const fib = N => {
    if (N < 2) {
        return N
    } else {
        return fib(N - 1) + fib(N - 2)
    }
}

// 尾调用优化
const fib = N => {
    const fibImpl = (a, b, n) => {
        if (n === 0) {
            return a
        }
        return fibImpl(b, a + b, n -1)
    }
    return fibImpl(0, 1, N)
}


const flatDeep = arr => Array.isArray(arr) ? arr.reduce((total, cur) => [...total, ...flatDeep(cur)]) : [arr]

技术文档集合