X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=fibonacci.js;h=a62f4711fc75adee803df9991769f832ff21d8b5;hb=05a1f5196369849f4e993f66062d5bbafbd9d5d9;hp=286c69cf498c688dbd48d99763b80c18d53c2f7c;hpb=bb578730a26e9d1ba7da2b40c084b5f70fa8f0c6;p=benchmarks-js.git diff --git a/fibonacci.js b/fibonacci.js index 286c69c..a62f471 100644 --- a/fibonacci.js +++ b/fibonacci.js @@ -7,18 +7,29 @@ const number = 30 * @returns */ function fibonacciLoop (num) { - let a = 1 - let b = 0 - let temp - - while (num >= 0) { - temp = a - a = a + b - b = temp - num-- + const fib = [] + fib[0] = 0 + fib[1] = 1 + for (let i = 2; i <= num; i++) { + fib[i] = fib[i - 2] + fib[i - 1] } + return fib[num] +} - return b +/** + * + * @param num + * @returns + */ +function fibonacciLoopWhile (num) { + let current = 1 + let previous = 0 + while (--num) { + const temp = current + current += previous + previous = temp + } + return current } /** @@ -26,8 +37,7 @@ function fibonacciLoop (num) { * @returns */ function fibonacciRecursion (num) { - if (num <= 1) return 1 - + if (num <= 1) return num return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2) } @@ -40,7 +50,7 @@ function fibonacciRecursionMemoization (num, memo) { memo = memo || {} if (memo[num]) return memo[num] - if (num <= 1) return 1 + if (num <= 1) return num return (memo[num] = fibonacciRecursionMemoization(num - 1, memo) + @@ -52,6 +62,9 @@ Benchmark.suite( Benchmark.add('fibonacciLoop', () => { fibonacciLoop(number) }), + Benchmark.add('fibonacciLoopWhile', () => { + fibonacciLoopWhile(number) + }), Benchmark.add('fibonacciRecursion', () => { fibonacciRecursion(number) }), @@ -63,4 +76,6 @@ Benchmark.suite( Benchmark.save({ file: 'fibonacci', format: 'json', details: true }), Benchmark.save({ file: 'fibonacci', format: 'chart.html', details: true }), Benchmark.save({ file: 'fibonacci', format: 'table.html', details: true }) -) +).catch(err => { + console.error(err) +})