diff --git a/21_recursiveFibonacci/README.md b/21_recursiveFibonacci/README.md new file mode 100644 index 00000000000..61e363c573c --- /dev/null +++ b/21_recursiveFibonacci/README.md @@ -0,0 +1,14 @@ +# Exercise - recursiveFibonacci + +Write a *recursive* function `recursiveFibonacci` that takes a number `n` and returns an array +containing that many numbers from the Fibonacci sequence. + +You should already be familiar of what the fibonacci series is from an earlier exercise, but in case you have forgotten, each term in a fibonacci series is defined as the sum of the previous two terms. + +The first term of the fibonacci series is `1` and so is the second term `1` too. From there, we can find the rest of the fibonacci series. + +An example: + +```javascript +recursiveFibonacci(8); // [0, 1, 1, 2, 3, 5, 8, 13] +``` diff --git a/21_recursiveFibonacci/recursiveFibonacci.js b/21_recursiveFibonacci/recursiveFibonacci.js new file mode 100644 index 00000000000..1794c906d91 --- /dev/null +++ b/21_recursiveFibonacci/recursiveFibonacci.js @@ -0,0 +1,6 @@ +const recursiveFibonacci = function() { + +}; + +// Do not edit below this line +module.exports = recursiveFibonacci; diff --git a/21_recursiveFibonacci/recursiveFibonacci.spec.js b/21_recursiveFibonacci/recursiveFibonacci.spec.js new file mode 100644 index 00000000000..80cdeb4ef29 --- /dev/null +++ b/21_recursiveFibonacci/recursiveFibonacci.spec.js @@ -0,0 +1,15 @@ +const recursiveFibonacci = require('./recursiveFibonacci'); + +describe('recursiveFibonacci', () => { + test('First test description', () => { + // Replace this comment with any other necessary code, and update the expect line as necessary + + expect(recursiveFibonacci()).toBe(''); + }); + + test.skip('Second test description', () => { + // Replace this comment with any other necessary code, and update the expect line as necessary + + expect(recursiveFibonacci()).toBe(''); + }); +}); diff --git a/21_recursiveFibonacci/solution/recursiveFibonacci-solution.js b/21_recursiveFibonacci/solution/recursiveFibonacci-solution.js new file mode 100644 index 00000000000..a95da8bdaee --- /dev/null +++ b/21_recursiveFibonacci/solution/recursiveFibonacci-solution.js @@ -0,0 +1,18 @@ +const recursiveFibonacci = function (n) { + switch (n) { + case 1: + return [1]; + case 2: + return [1, 1]; + } + + const previousSolution = recursiveFibonacci(n - 1); + + return [ + ...previousSolution, + previousSolution.at(-1) + previousSolution.at(-2), + ]; +}; + +// Do not edit below this line +module.exports = recursiveFibonacci; diff --git a/21_recursiveFibonacci/solution/recursiveFibonacci-solution.spec.js b/21_recursiveFibonacci/solution/recursiveFibonacci-solution.spec.js new file mode 100644 index 00000000000..0b6e34e4a84 --- /dev/null +++ b/21_recursiveFibonacci/solution/recursiveFibonacci-solution.spec.js @@ -0,0 +1,46 @@ +const recursiveFibonacci = require('./recursiveFibonacci-solution'); + +describe('recursiveFibonacci', () => { + test('Gets 1 fibonacci number', () => { + expect(recursiveFibonacci(1)).toEqual([1]); + }); + + test('Gets 2 fibonacci numbers', () => { + expect(recursiveFibonacci(2)).toEqual([1, 1]); + }); + + test('Gets 3 fibonacci numbers', () => { + expect(recursiveFibonacci(3)).toEqual([1, 1, 2]); + }); + + test('Gets 4 fibonacci numbers', () => { + expect(recursiveFibonacci(4)).toEqual([1, 1, 2, 3]); + }); + + test('Gets 5 fibonacci numbers', () => { + expect(recursiveFibonacci(5)).toEqual([1, 1, 2, 3, 5]); + }); + + test('Gets 6 fibonacci numbers', () => { + expect(recursiveFibonacci(6)).toEqual([1, 1, 2, 3, 5, 8]); + }); + + test('Gets 10 fibonacci numbers', () => { + expect(recursiveFibonacci(10)).toEqual([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]); + }); + + test('Gets 12 fibonacci numbers', () => { + expect(recursiveFibonacci(12)).toEqual([1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]); + }); + + test('Gets 15 fibonacci numbers', () => { + expect(recursiveFibonacci(15)).toEqual([1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]); + }); + + test('Gets 20 fibonacci numbers', () => { + expect(recursiveFibonacci(20)).toEqual([ + 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765 + ]); + }); +}); +