From 75c918a60fd281bfe0ae50ce93b016833728a126 Mon Sep 17 00:00:00 2001 From: madhuredra Date: Sun, 1 Oct 2023 16:49:13 +0530 Subject: [PATCH 1/2] feat : added fibonacci method using formula --- maths/fibonacci.ts | 15 +++++++++++++++ maths/test/fibonacci.test.ts | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/maths/fibonacci.ts b/maths/fibonacci.ts index 33013d68..3d4cb118 100644 --- a/maths/fibonacci.ts +++ b/maths/fibonacci.ts @@ -56,3 +56,18 @@ export const nthFibonacciRecursively = (number: number): number => { nthFibonacciRecursively(number - 1) + nthFibonacciRecursively(number - 2) ); }; + + +/** + * @param number The index of the number in the Fibonacci sequence. + * @return The Fibonacci number on the nth index in the sequence. + * @example nthFibonacci(4) => 3 | nthFibonacci(6) => 8 + * @see : https://math.hmc.edu/funfacts/fibonacci-number-formula/ + * @author : dev-madhurendra + */ + +const sqrt5 = Math.sqrt(5) +const phi = (1 + sqrt5) / 2 +const psi = (1 - sqrt5) / 2 + +export const nthFibonacciUsingFormula = (n : number) => Math.round((phi ** n - psi ** n) / sqrt5) diff --git a/maths/test/fibonacci.test.ts b/maths/test/fibonacci.test.ts index e0a8d14b..005dc3c5 100644 --- a/maths/test/fibonacci.test.ts +++ b/maths/test/fibonacci.test.ts @@ -1,4 +1,4 @@ -import { nthFibonacci, nthFibonacciRecursively } from '../fibonacci'; +import { nthFibonacciUsingFormula, nthFibonacci, nthFibonacciRecursively } from '../fibonacci'; const test = (func: (n: number) => number) => it.each([ @@ -11,3 +11,4 @@ const test = (func: (n: number) => number) => ])('fib(%i) = %i', (n, expected) => expect(func(n)).toBe(expected)); describe('Fibonacci iterative', () => test(nthFibonacci)); describe('Fibonacci recursive', () => test(nthFibonacciRecursively)); +describe('Fibonacci recursive', () => test(nthFibonacciUsingFormula)); From b1310dfb895417fc065f655ee5f950ac68f95750 Mon Sep 17 00:00:00 2001 From: madhuredra Date: Sun, 1 Oct 2023 16:53:06 +0530 Subject: [PATCH 2/2] fix : test cases --- maths/test/fibonacci.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/test/fibonacci.test.ts b/maths/test/fibonacci.test.ts index 005dc3c5..9d48d2a4 100644 --- a/maths/test/fibonacci.test.ts +++ b/maths/test/fibonacci.test.ts @@ -11,4 +11,4 @@ const test = (func: (n: number) => number) => ])('fib(%i) = %i', (n, expected) => expect(func(n)).toBe(expected)); describe('Fibonacci iterative', () => test(nthFibonacci)); describe('Fibonacci recursive', () => test(nthFibonacciRecursively)); -describe('Fibonacci recursive', () => test(nthFibonacciUsingFormula)); +describe('Fibonacci Using formula', () => test(nthFibonacciUsingFormula));