Skip to content

Feat: Fibonacci Series #205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Oct 22, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@
* [Pronic Number](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/pronic_number.ts)
* [Radians To Degrees](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/radians_to_degrees.ts)
* Series
* [Fibonacci Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/fibonacci_numbers.ts)
* [Hexagonal Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/hexagonal_numbers.ts)
* Test
* [Fibonacci Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/fibonacci_numbers.test.ts)
* [Hexagonal Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/hexagonal_numbers.test.ts)
* [Sieve Of Eratosthenes](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/sieve_of_eratosthenes.ts)
* [Signum](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/signum.ts)
Expand Down
26 changes: 26 additions & 0 deletions maths/series/fibonacci_numbers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* @function FibonacciNumbers
* @description To generate the requested number of fibonacci numbers
* @summary the Fibonacci sequence is a sequence in which each number is the sum of the two preceding ones.
* @see [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_sequence)
* @author MohdFaisalBidda <https://github.com/MohdFaisalBidda>
* @param {number} n - The number of fibonacci numbers to generate
* @returns {number[]} - An array containing first 'n' fibonacci numbers
* @example fibonacciNumbers(7) = [ 0, 1, 1, 2, 3, 5, 8 ]
* @example fibonacciNumbers(15) = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ]
*/
export const FibonacciNumbers = (n: number): number[] => {
if (isNaN(n)) throw new Error('The input needs to be a number')
if (!Number.isInteger(n) || n < 0) throw new Error('The input needs to be a non-negative integer')
if (n <= 0) return [];
if (n === 1) return [0];

const fibonacciNumbers: number[] = [0, 1];

while (fibonacciNumbers.length < n) {
const next = fibonacciNumbers[fibonacciNumbers.length - 1] + fibonacciNumbers[fibonacciNumbers.length - 2];
fibonacciNumbers.push(next);
}

return fibonacciNumbers;
}
15 changes: 15 additions & 0 deletions maths/series/test/fibonacci_numbers.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { FibonacciNumbers } from "../fibonacci_numbers";

describe("FibonacciNumbers", () => {
it("should return the first 10 fibonacci numbers", () => {
expect(FibonacciNumbers(10)).toStrictEqual([0, 1, 1, 2, 3, 5, 8, 13, 21, 34]);
})

it("should return the first 5 fibonacci numbers", () => {
expect(FibonacciNumbers(5)).toStrictEqual([0, 1, 1, 2, 3])
})

it("should return zero fibonacci numbers", () => {
expect(FibonacciNumbers(0)).toStrictEqual([])
})
})