From e100fe81c39cb47348046319e99ec2f2894dab93 Mon Sep 17 00:00:00 2001 From: helloShen Date: Tue, 8 Feb 2022 14:19:06 -0500 Subject: [PATCH] Add recursive and dynamic programming solution to fibonacci --- fibonacci/fibonacci.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/fibonacci/fibonacci.js b/fibonacci/fibonacci.js index 29ea89d..8d0e059 100644 --- a/fibonacci/fibonacci.js +++ b/fibonacci/fibonacci.js @@ -1,6 +1,6 @@ const fibonacci = function(count) { if (count < 0) return "OOPS"; - if (count === 0) return 0; + if (count == 0) return 0; let a = 0; let b = 1; for (let i = 1; i < count; i++) { @@ -11,4 +11,25 @@ const fibonacci = function(count) { return b; }; -module.exports = fibonacci; +/* naive recursive */ +const fibonacciRecursive = function(count) { + if (count < 0) return 'OOPS'; + if (count == 0) return 0; + if (count == 1) return 1; + return fibonacciRecursive(count - 1) + fibonacciRecursive(count - 2); +} + +/* Dynamic Programming (DP) recursive */ +const fibonacciDp= function(count) { + return fibonacciDpHelper(count, {'0': 0, '1': 1}); +} + +const fibonacciDpHelper = function(count, memo) { + if (count < 0) return 'OOPS'; + if (memo.hasOwnProperty(`${count}`)) return memo[`${count}`]; + const result = fibonacciDpHelper(count - 1, memo) + fibonacciDpHelper(count - 2, memo); + memo[`${count}`] = result; + return result; +} + +module.exports = fibonacci; \ No newline at end of file