Skip to content

Instantly share code, notes, and snippets.

@vlad-bezden
Created October 2, 2016 12:59
Show Gist options
  • Save vlad-bezden/81bcb171a34d7ea3ac5f66da56a53f10 to your computer and use it in GitHub Desktop.
Save vlad-bezden/81bcb171a34d7ea3ac5f66da56a53f10 to your computer and use it in GitHub Desktop.
Fibonacci Number

Fibonacci Number

Fibonacci implementation in JavaScript using recursion and while loop. It also used qunit assertion library for testing result.

A Pen by Vlad Bezden on CodePen.

License.

<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
'use strict'
/**
* Fibonacci numbers
* 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946
*/
/**
* Fibonacci calculator using recursion
*
* @param {number} n - fibonacci number to be calculated
* @return {number} - calclated fibonacci number
*/
function fibonacciRecursion(n) {
return n < 2 ? n : fibonacciRecursion(n - 2) + fibonacciRecursion(n - 1)
}
/**
* Fibonacci calculator using while loop
*
* @param {number} n - fibonacci number to be calculated
* @return {number} - calclated fibonacci number
*/
function fibonacciLoop(n) {
let a = 1,
b = 0
while (n--) {
[a, b] = [b, b + a]
}
return b
}
/**
* Test cases for fibonacciRecurions function
*/
QUnit.test("fibonacciRecursion tests", (assert) => {
assert.equal(fibonacciRecursion(0), 0)
assert.equal(fibonacciRecursion(1), 1)
assert.equal(fibonacciRecursion(2), 1)
assert.equal(fibonacciRecursion(3), 2)
assert.equal(fibonacciRecursion(4), 3)
assert.equal(fibonacciRecursion(5), 5)
assert.equal(fibonacciRecursion(6), 8)
assert.equal(fibonacciRecursion(7), 13)
assert.equal(fibonacciRecursion(14), 377)
})
/**
* Test cases for fibonacci numbers using loop
*/
QUnit.test("fibonacciLoop tests", (assert) => {
assert.equal(fibonacciLoop(0), 0)
assert.equal(fibonacciLoop(1), 1)
assert.equal(fibonacciLoop(2), 1)
assert.equal(fibonacciLoop(3), 2)
assert.equal(fibonacciLoop(4), 3)
assert.equal(fibonacciLoop(5), 5)
assert.equal(fibonacciLoop(6), 8)
assert.equal(fibonacciLoop(7), 13)
assert.equal(fibonacciLoop(14), 377)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/qunit/2.0.1/qunit.min.js"></script>
body {
background-color: #222;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/qunit/2.0.1/qunit.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment