Compare commits

...

9 Commits

Author SHA1 Message Date
Antonio Eduardo Moreira
55d8c07f5a
Merge 7119baa058 into 2c67b48c21 2024-04-25 08:17:30 +08:00
edumoreira1506
7119baa058 Shore refacto 2019-09-10 14:27:01 -03:00
edumoreira1506
d02bd00ed3 Fixing the algorithm 2019-08-27 12:03:55 -03:00
edumoreira1506
9a9c92d353 Fixing the spaces 2019-08-27 11:57:00 -03:00
edumoreira1506
8ee786a598 Fixing the spaces identation 2019-08-26 09:12:16 -03:00
edumoreira1506
2d87b6f7b3 Adding readme 2019-08-23 14:47:25 -03:00
edumoreira1506
a9b6118b04 Adding tests to tribonacci 2019-08-23 14:44:44 -03:00
edumoreira1506
c18fd28d0f Fixing name of file 2019-08-23 14:34:55 -03:00
edumoreira1506
44b1758631 Tribonacci sequence 2019-08-23 14:25:15 -03:00
5 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,10 @@
# Tribonacci Number
The tribonacci numbers are a homogeneous linear recurrence with constant coefficients of order 3 with signature (0, 0, 1), inspired from the Fibonacci numbers (which are of order 2 with signature (0, 1)), i.e.
`0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, 274, 504, 927, 1705, 3136 ...`
## References
- [Brilliant](https://brilliant.org/wiki/tribonacci-sequence/)
- [Oeis](http://oeis.org/wiki/Tribonacci_numbers)

View File

@ -0,0 +1,16 @@
import tribonacci from '../tribonacci';
describe('tribonacci', () => {
it('should calculate tribonacci correctly', () => {
expect(tribonacci(1)).toEqual([0]);
expect(tribonacci(2)).toEqual([0, 0]);
expect(tribonacci(3)).toEqual([0, 0, 1]);
expect(tribonacci(4)).toEqual([0, 0, 1, 1]);
expect(tribonacci(5)).toEqual([0, 0, 1, 1, 2]);
expect(tribonacci(6)).toEqual([0, 0, 1, 1, 2, 4]);
expect(tribonacci(7)).toEqual([0, 0, 1, 1, 2, 4, 7]);
expect(tribonacci(8)).toEqual([0, 0, 1, 1, 2, 4, 7, 13]);
expect(tribonacci(9)).toEqual([0, 0, 1, 1, 2, 4, 7, 13, 24]);
expect(tribonacci(10)).toEqual([0, 0, 1, 1, 2, 4, 7, 13, 24, 44]);
});
});

View File

@ -0,0 +1,17 @@
import tribonacciNth from '../tribonacciNth';
describe('tribonacciNth', () => {
it('should calculate tribonacci correctly', () => {
expect(tribonacciNth(1)).toBe(0);
expect(tribonacciNth(2)).toBe(1);
expect(tribonacciNth(3)).toBe(1);
expect(tribonacciNth(4)).toBe(2);
expect(tribonacciNth(5)).toBe(4);
expect(tribonacciNth(6)).toBe(7);
expect(tribonacciNth(7)).toBe(13);
expect(tribonacciNth(8)).toBe(24);
expect(tribonacciNth(20)).toBe(35890);
expect(tribonacciNth(30)).toBe(15902591);
expect(tribonacciNth(50)).toBe(3122171529233);
});
});

View File

@ -0,0 +1,22 @@
/**
* Return a tribonacci sequence as an array.
*
* @param n
* @return {number[]}
*/
export default function tribonacci(n) {
const tribSequence = [0];
if (n >= 2) {
tribSequence.push(0);
}
let currentValue = 1;
for (let i = 2; i < n; i += 1) {
tribSequence.push(currentValue);
currentValue += tribSequence[i - 1] + tribSequence[i - 2];
}
return tribSequence;
}

View File

@ -0,0 +1,17 @@
/**
* Calculate tribonacci number at specific position using Dynamic Programming approach.
*
* @param n
* @return {number}
*/
export default function tribonacciNth(n) {
const tribSequence = [0, 0, 1];
let currentValue = 1;
for (let i = 3; i <= n; i += 1) {
tribSequence.push(currentValue);
currentValue += tribSequence[i - 1] + tribSequence[i - 2];
}
return tribSequence[n];
}