forked from ohxxx/algorithm-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfibonacci.js
More file actions
41 lines (33 loc) · 795 Bytes
/
Copy pathfibonacci.js
File metadata and controls
41 lines (33 loc) · 795 Bytes
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 递归方法
function fibonacci(n) {
if (n < 1) return 0;
if (n <= 2) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// 迭代方法
function fibonacciIterative(n) {
if (n < 1) return 0;
let fibNMinus2 = 0
let fibNMinus1 = 1
let fibN = n
for (let i = 2; i <= n; i++) {
fibN = fibNMinus1 + fibNMinus2
fibNMinus2 = fibNMinus1
fibNMinus1 = fibN
}
return fibN
}
// 记忆化
function fibonacciMemoization(n) {
if (n < 1) return 0;
const memo = [0, 1]
const fibonacciMem = num => {
if (memo[num] != null) return memo[num];
return (memo[num] = fibonacciMem(num - 1) + fibonacciMem(num - 2));
}
return fibonacciMem(n);
}
// test
console.log(fibonacci(10));
console.log(fibonacciIterative(10));
console.log(fibonacciMemoization(10));