描述
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
1 2
| F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
|
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
结果大于1000000007时,需要做取模处理,如计算初始结果为:1000000008,请返回 1。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const fib = function (n) { const cache = new Map([ [0, 0], [1, 1], [2, 1], ])
function inner(n) { if (cache.has(n)) { return cache.get(n) } let result = inner(n - 2) + inner(n - 1) if (result > 1000000007) { result = result % 1000000007 } cache.set(n, result) return result } return inner(n) }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const fib = function (n) { const map = new Map([ [0, 0], [1, 1], [2, 1], ]) if (n <= 2) { return map.get(n) } let i = 3 let p1 = map.get(1) let p2 = map.get(2) while (i <= n) { let result = p1 + p2 if (result > 1000000007) { result = result % 1000000007 } p1 = p2 p2 = result i++ } return p2 }
|