mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-11-10 11:09:43 +08:00
Compare commits
9 Commits
b3f7bc5775
...
55d8c07f5a
Author | SHA1 | Date | |
---|---|---|---|
|
55d8c07f5a | ||
|
7119baa058 | ||
|
d02bd00ed3 | ||
|
9a9c92d353 | ||
|
8ee786a598 | ||
|
2d87b6f7b3 | ||
|
a9b6118b04 | ||
|
c18fd28d0f | ||
|
44b1758631 |
10
src/algorithms/math/tribonacci/README.md
Normal file
10
src/algorithms/math/tribonacci/README.md
Normal 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)
|
16
src/algorithms/math/tribonacci/__test__/tribonacci.test.js
Normal file
16
src/algorithms/math/tribonacci/__test__/tribonacci.test.js
Normal 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]);
|
||||
});
|
||||
});
|
@ -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);
|
||||
});
|
||||
});
|
22
src/algorithms/math/tribonacci/tribonacci.js
Normal file
22
src/algorithms/math/tribonacci/tribonacci.js
Normal 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;
|
||||
}
|
17
src/algorithms/math/tribonacci/tribonacciNth.js
Normal file
17
src/algorithms/math/tribonacci/tribonacciNth.js
Normal 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];
|
||||
}
|
Loading…
Reference in New Issue
Block a user