From 4434493b8fef8390d5c1c352053a187d2b7ca774 Mon Sep 17 00:00:00 2001 From: Nitin Ramnani Date: Sat, 1 Oct 2022 08:54:10 +0530 Subject: [PATCH] Added Fibonacci Number with recursion in DP --- .../FibonacciNumberRecursive.js | 26 +++++++++++++++++++ .../tests/FibonacciNumberRecursive.test.js | 24 +++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 Dynamic-Programming/FibonacciNumberRecursive.js create mode 100644 Dynamic-Programming/tests/FibonacciNumberRecursive.test.js diff --git a/Dynamic-Programming/FibonacciNumberRecursive.js b/Dynamic-Programming/FibonacciNumberRecursive.js new file mode 100644 index 0000000000..a263915c65 --- /dev/null +++ b/Dynamic-Programming/FibonacciNumberRecursive.js @@ -0,0 +1,26 @@ +/** + * @function fibonacci + * @description Fibonacci is the sum of previous two fibonacci numbers. + * @param {Integer} N - The input integer + * @return {Integer} fibonacci of N. + * @see [Fibonacci_Numbers](https://en.wikipedia.org/wiki/Fibonacci_number) + */ +const fibonacci = (N) => { + if (!Number.isInteger(N)) { + throw new TypeError('Input should be integer') + } + const dp = new Map() + return fiboDP(N, dp) +} + +const fiboDP = (N, dp) => { + if (N <= 1) return N + + if (dp.has(N)) return dp.get(N) + + const result = fiboDP(N - 1, dp) + fiboDP(N - 2, dp) + dp.set(N, result) + return result +} + +export { fibonacci } diff --git a/Dynamic-Programming/tests/FibonacciNumberRecursive.test.js b/Dynamic-Programming/tests/FibonacciNumberRecursive.test.js new file mode 100644 index 0000000000..7ac95bc7ed --- /dev/null +++ b/Dynamic-Programming/tests/FibonacciNumberRecursive.test.js @@ -0,0 +1,24 @@ +import { fibonacci } from '../FibonacciNumberRecursive' + +describe('Testing FibonacciNumberRecursive', () => { + it('fibonacci of 0', () => { + expect(fibonacci(0)).toBe(0) + }) + + it('fibonacci of 1', () => { + expect(fibonacci(1)).toBe(1) + }) + + it('fibonacci of 10', () => { + expect(fibonacci(10)).toBe(55) + }) + + it('fibonacci of 25', () => { + expect(fibonacci(25)).toBe(75025) + }) + + it('Testing for invalid type', () => { + expect(() => fibonacci('abc')).toThrowError() + expect(() => fibonacci()).toThrowError() + }) +})