* @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
}
/**
* @returns
*/
function fibonacciRecursion (num) {
- if (num <= 1) return 1
-
+ if (num <= 1) return num
return fibonacciRecursion(num - 1) + fibonacciRecursion(num - 2)
}
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) +
}
Benchmark.suite(
- 'Fibonacci',
+ `Fibonacci number ${number}`,
Benchmark.add('fibonacciLoop', () => {
fibonacciLoop(number)
}),
+ Benchmark.add('fibonacciLoopWhile', () => {
+ fibonacciLoopWhile(number)
+ }),
Benchmark.add('fibonacciRecursion', () => {
fibonacciRecursion(number)
}),
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)
+})