diff --git a/Dynamic-Programming/TribonacciNumber.js b/Dynamic-Programming/TribonacciNumber.js new file mode 100644 index 000000000..67a95a0e4 --- /dev/null +++ b/Dynamic-Programming/TribonacciNumber.js @@ -0,0 +1,20 @@ +/** + * @function Tribonacci + * @description Tribonacci is the sum of previous three tribonacci numbers. + * @param {Integer} n - The input integer + * @return {Integer} tribonacci of n. + * @see [Tribonacci_Numbers](https://www.geeksforgeeks.org/tribonacci-numbers/) + */ +const tribonacci = (n) => { + // creating array to store previous tribonacci numbers + const dp = new Array(n + 1) + dp[0] = 0 + dp[1] = 1 + dp[2] = 1 + for (let i = 3; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] + } + return dp[n] +} + +export { tribonacci } diff --git a/Dynamic-Programming/tests/TribonacciNumber.test.js b/Dynamic-Programming/tests/TribonacciNumber.test.js new file mode 100644 index 000000000..1ce012dfe --- /dev/null +++ b/Dynamic-Programming/tests/TribonacciNumber.test.js @@ -0,0 +1,23 @@ +import { tribonacci } from '../TribonacciNumber' + +describe('TribonacciNumber', () => { + it('tribonacci of 0', () => { + expect(tribonacci(0)).toBe(0) + }) + + it('tribonacci of 1', () => { + expect(tribonacci(1)).toBe(1) + }) + + it('tribonacci of 2', () => { + expect(tribonacci(2)).toBe(1) + }) + + it('tribonacci of 10', () => { + expect(tribonacci(10)).toBe(149) + }) + + it('tribonacci of 25', () => { + expect(tribonacci(25)).toBe(1389537) + }) +})