Commit | Line | Data |
---|---|---|
4676a95c | 1 | import { bench, group, run } from 'tatami-ng' |
a9c78d5d JB |
2 | |
3 | const number = 30 | |
4 | ||
5 | /** | |
6 | * @param num | |
7fd91296 | 7 | * @returns |
a9c78d5d JB |
8 | */ |
9 | function fibonacciLoop (num) { | |
b34f63ab JB |
10 | const fib = [] |
11 | fib[0] = 0 | |
12 | fib[1] = 1 | |
13 | for (let i = 2; i <= num; i++) { | |
14 | fib[i] = fib[i - 2] + fib[i - 1] | |
a9c78d5d | 15 | } |
b34f63ab | 16 | return fib[num] |
a9c78d5d JB |
17 | } |
18 | ||
ddcd2a7a JB |
19 | /** |
20 | * | |
21 | * @param num | |
22 | * @returns | |
23 | */ | |
24 | function fibonacciLoopWhile (num) { | |
25 | let current = 1 | |
26 | let previous = 0 | |
27 | while (--num) { | |
1b4e2f91 | 28 | const tmp = current |
ddcd2a7a | 29 | current += previous |
1b4e2f91 | 30 | previous = tmp |
ddcd2a7a JB |
31 | } |
32 | return current | |
33 | } | |
34 | ||
a9c78d5d JB |
35 | /** |
36 | * @param num | |
7fd91296 | 37 | * @returns |
a9c78d5d JB |
38 | */ |
39 | function fibonacciRecursion (num) { | |
b34f63ab | 40 | if (num <= 1) return num |
a9c78d5d JB |
41 | return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2) |
42 | } | |
43 | ||
44 | /** | |
45 | * @param num | |
46 | * @param memo | |
7fd91296 | 47 | * @returns |
a9c78d5d JB |
48 | */ |
49 | function fibonacciRecursionMemoization (num, memo) { | |
50 | memo = memo || {} | |
51 | ||
52 | if (memo[num]) return memo[num] | |
b34f63ab | 53 | if (num <= 1) return num |
a9c78d5d JB |
54 | |
55 | return (memo[num] = | |
56 | fibonacciRecursionMemoization(num - 1, memo) + | |
57 | fibonacciRecursionMemoization(num - 2, memo)) | |
58 | } | |
59 | ||
ab9a08f3 JB |
60 | group(`Fibonacci number ${number}`, () => { |
61 | bench('fibonacciLoop', () => { | |
a9c78d5d | 62 | fibonacciLoop(number) |
ab9a08f3 JB |
63 | }) |
64 | bench('fibonacciLoopWhile', () => { | |
ddcd2a7a | 65 | fibonacciLoopWhile(number) |
ab9a08f3 JB |
66 | }) |
67 | bench('fibonacciRecursion', () => { | |
a9c78d5d | 68 | fibonacciRecursion(number) |
ab9a08f3 JB |
69 | }) |
70 | bench('fibonacciRecursionMemoization', () => { | |
a9c78d5d | 71 | fibonacciRecursionMemoization(number) |
ab9a08f3 JB |
72 | }) |
73 | }) | |
74 | ||
75 | await run({ | |
ebf80fe4 | 76 | units: true, |
ab9a08f3 | 77 | }) |