Commit | Line | Data |
---|---|---|
a9c78d5d JB |
1 | const Benchmark = require('benchmark') |
2 | const { LIST_FORMATTER } = require('./benchmark-utils') | |
3 | ||
4 | const suite = new Benchmark.Suite() | |
5 | ||
6 | const number = 30 | |
7 | ||
8 | /** | |
9 | * @param num | |
7fd91296 | 10 | * @returns |
a9c78d5d JB |
11 | */ |
12 | function fibonacciLoop (num) { | |
13 | let a = 1 | |
14 | let b = 0 | |
15 | let temp | |
16 | ||
17 | while (num >= 0) { | |
18 | temp = a | |
19 | a = a + b | |
20 | b = temp | |
21 | num-- | |
22 | } | |
23 | ||
24 | return b | |
25 | } | |
26 | ||
27 | /** | |
28 | * @param num | |
7fd91296 | 29 | * @returns |
a9c78d5d JB |
30 | */ |
31 | function fibonacciRecursion (num) { | |
32 | if (num <= 1) return 1 | |
33 | ||
34 | return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2) | |
35 | } | |
36 | ||
37 | /** | |
38 | * @param num | |
39 | * @param memo | |
7fd91296 | 40 | * @returns |
a9c78d5d JB |
41 | */ |
42 | function fibonacciRecursionMemoization (num, memo) { | |
43 | memo = memo || {} | |
44 | ||
45 | if (memo[num]) return memo[num] | |
46 | if (num <= 1) return 1 | |
47 | ||
48 | return (memo[num] = | |
49 | fibonacciRecursionMemoization(num - 1, memo) + | |
50 | fibonacciRecursionMemoization(num - 2, memo)) | |
51 | } | |
52 | ||
53 | suite | |
2deff321 | 54 | .add('fibonacciLoop', () => { |
a9c78d5d JB |
55 | fibonacciLoop(number) |
56 | }) | |
2deff321 | 57 | .add('fibonacciRecursion', () => { |
a9c78d5d JB |
58 | fibonacciRecursion(number) |
59 | }) | |
2deff321 | 60 | .add('fibonacciRecursionMemoization', () => { |
a9c78d5d JB |
61 | fibonacciRecursionMemoization(number) |
62 | }) | |
2deff321 | 63 | .on('cycle', event => { |
a9c78d5d JB |
64 | console.log(event.target.toString()) |
65 | }) | |
66 | .on('complete', function () { | |
67 | console.log( | |
68 | 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name')) | |
69 | ) | |
7fd91296 | 70 | // eslint-disable-next-line n/no-process-exit |
a9c78d5d JB |
71 | process.exit() |
72 | }) | |
73 | .run() |