Skip to content

Instantly share code, notes, and snippets.

@BenDMyers
Created June 20, 2022 15:19
Show Gist options
  • Save BenDMyers/c6b8a811380f3485b7cc2d7c18e52e62 to your computer and use it in GitHub Desktop.
Save BenDMyers/c6b8a811380f3485b7cc2d7c18e52e62 to your computer and use it in GitHub Desktop.
RWC: Previous Fibonacci Number
/**
* Gets the previous number in the Fibonacci sequence, or -1 if this number isn't in the sequence
* @param {number} num
* @returns {number} previous Fibonacci number (or -1)
*/
function getPreviousFibonacciNumber(num) {
// Handle negatives
if (num <= 0) {
return -1;
}
// 1 is an odd case, because it appears twice, so solution could be either 0 or 1
if (num === 1) {
return 0;
}
const mostRecentNumbersInSequence = [1, 1];
let sum = add(mostRecentNumbersInSequence);
while (sum <= num) {
mostRecentNumbersInSequence.push(sum); // Add sum to sequence
mostRecentNumbersInSequence.shift(); // Demote n[k-2] from sequence
sum = add(mostRecentNumbersInSequence);
}
if (mostRecentNumbersInSequence[1] === num) {
return mostRecentNumbersInSequence[0];
} else {
return -1;
}
}
/**
* Sums up an array
* @param {number[]} nums array of numbers
* @returns {number} sum of all numbers in array
*/
function add(nums) {
const sum = nums.reduce((total, addend) => total + addend, 0);
return sum;
}
console.log(
getPreviousFibonacciNumber(-30),
getPreviousFibonacciNumber(1),
getPreviousFibonacciNumber(13),
getPreviousFibonacciNumber(144),
getPreviousFibonacciNumber(2584),
getPreviousFibonacciNumber(2589),
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment