Commit | Line | Data |
---|---|---|
662a730a | 1 | const Benchmark = require('benny') |
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 | ||
19 | /** | |
20 | * @param num | |
7fd91296 | 21 | * @returns |
a9c78d5d JB |
22 | */ |
23 | function fibonacciRecursion (num) { | |
b34f63ab | 24 | if (num <= 1) return num |
a9c78d5d JB |
25 | return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2) |
26 | } | |
27 | ||
28 | /** | |
29 | * @param num | |
30 | * @param memo | |
7fd91296 | 31 | * @returns |
a9c78d5d JB |
32 | */ |
33 | function fibonacciRecursionMemoization (num, memo) { | |
34 | memo = memo || {} | |
35 | ||
36 | if (memo[num]) return memo[num] | |
b34f63ab | 37 | if (num <= 1) return num |
a9c78d5d JB |
38 | |
39 | return (memo[num] = | |
40 | fibonacciRecursionMemoization(num - 1, memo) + | |
41 | fibonacciRecursionMemoization(num - 2, memo)) | |
42 | } | |
43 | ||
662a730a | 44 | Benchmark.suite( |
bb578730 | 45 | `Fibonacci number ${number}`, |
662a730a | 46 | Benchmark.add('fibonacciLoop', () => { |
a9c78d5d | 47 | fibonacciLoop(number) |
662a730a JB |
48 | }), |
49 | Benchmark.add('fibonacciRecursion', () => { | |
a9c78d5d | 50 | fibonacciRecursion(number) |
662a730a JB |
51 | }), |
52 | Benchmark.add('fibonacciRecursionMemoization', () => { | |
a9c78d5d | 53 | fibonacciRecursionMemoization(number) |
662a730a JB |
54 | }), |
55 | Benchmark.cycle(), | |
56 | Benchmark.complete(), | |
57 | Benchmark.save({ file: 'fibonacci', format: 'json', details: true }), | |
58 | Benchmark.save({ file: 'fibonacci', format: 'chart.html', details: true }), | |
59 | Benchmark.save({ file: 'fibonacci', format: 'table.html', details: true }) | |
4b16770a JB |
60 | ).catch(err => { |
61 | console.error(err) | |
62 | }) |