From 2e84f97ba704dc0876b5258010c7a663c2053772 Mon Sep 17 00:00:00 2001 From: Nour B <56294154+nourrrrrrrr@users.noreply.github.com> Date: Fri, 1 May 2020 12:56:18 +0100 Subject: [PATCH 1/2] Create Fibonacci.js --- maths/Fibonacci.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 maths/Fibonacci.js diff --git a/maths/Fibonacci.js b/maths/Fibonacci.js new file mode 100644 index 0000000000..5dc15f61c8 --- /dev/null +++ b/maths/Fibonacci.js @@ -0,0 +1,52 @@ +// @flow +type num = number; + +const list = []; + +export default function FibonacciIterative(nth: number): num[] { + const sequence = []; + + if (nth >= 1) sequence.push(1); + if (nth >= 2) sequence.push(1); + + for (let i = 2; i < nth; i++) { + sequence.push(sequence[i - 1] + sequence[i - 2]); + } + + return sequence; +} + +export function FibonacciRecursive(number: num): num[] { + return ((): num[] => { + switch (list.length) { + case 0: + list.push(1); + return FibonacciRecursive(number); + case 1: + list.push(1); + return FibonacciRecursive(number); + case number: + return list; + default: + list.push(list[list.length - 1] + list[list.length - 2]); + return FibonacciRecursive(number); + } + })(); +} + +const dict: Map = new Map(); + +export function FibonacciRecursiveDP(stairs: num): num { + if (stairs <= 0) return 0; + if (stairs === 1) return 1; + + // Memoize stair count + if (dict.has(stairs)) return dict.get(stairs); + + const res = + FibonacciRecursiveDP(stairs - 1) + FibonacciRecursiveDP(stairs - 2); + + dict.set(stairs, res); + + return res; +} From bcead93f1182447319e35df4bee78c2870f2a098 Mon Sep 17 00:00:00 2001 From: vinayak Date: Wed, 6 May 2020 18:10:43 +0530 Subject: [PATCH 2/2] Update Fibonacci.js --- maths/Fibonacci.js | 63 +++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/maths/Fibonacci.js b/maths/Fibonacci.js index 5dc15f61c8..3f8be74322 100644 --- a/maths/Fibonacci.js +++ b/maths/Fibonacci.js @@ -1,52 +1,59 @@ -// @flow -type num = number; +const list = [] -const list = []; +const FibonacciIterative = (nth) => { + const sequence = [] -export default function FibonacciIterative(nth: number): num[] { - const sequence = []; - - if (nth >= 1) sequence.push(1); - if (nth >= 2) sequence.push(1); + if (nth >= 1) sequence.push(1) + if (nth >= 2) sequence.push(1) for (let i = 2; i < nth; i++) { - sequence.push(sequence[i - 1] + sequence[i - 2]); + sequence.push(sequence[i - 1] + sequence[i - 2]) } - return sequence; + return sequence } -export function FibonacciRecursive(number: num): num[] { - return ((): num[] => { +const FibonacciRecursive = (number) => { + return (() => { switch (list.length) { case 0: - list.push(1); - return FibonacciRecursive(number); + list.push(1) + return FibonacciRecursive(number) case 1: - list.push(1); - return FibonacciRecursive(number); + list.push(1) + return FibonacciRecursive(number) case number: - return list; + return list default: - list.push(list[list.length - 1] + list[list.length - 2]); - return FibonacciRecursive(number); + list.push(list[list.length - 1] + list[list.length - 2]) + return FibonacciRecursive(number) } - })(); + })() } -const dict: Map = new Map(); +const dict = new Map() -export function FibonacciRecursiveDP(stairs: num): num { - if (stairs <= 0) return 0; - if (stairs === 1) return 1; +const FibonacciRecursiveDP = (stairs) => { + if (stairs <= 0) return 0 + if (stairs === 1) return 1 // Memoize stair count - if (dict.has(stairs)) return dict.get(stairs); + if (dict.has(stairs)) return dict.get(stairs) const res = - FibonacciRecursiveDP(stairs - 1) + FibonacciRecursiveDP(stairs - 2); + FibonacciRecursiveDP(stairs - 1) + FibonacciRecursiveDP(stairs - 2) - dict.set(stairs, res); + dict.set(stairs, res) - return res; + return res } + +// testing + +console.log(FibonacciIterative(5)) +// Output: [ 1, 1, 2, 3, 5 ] +console.log(FibonacciRecursive(5)) +// Output: [ 1, 1, 2, 3, 5 ] + +console.log(FibonacciRecursiveDP(5)) +// Output: 5