2023-10-29 11:36:58 +00:00
|
|
|
const fibonacci = function(countArg) {
|
|
|
|
// checks argument's type and makes sure we use
|
|
|
|
// a number throughout rest of function.
|
|
|
|
let count
|
|
|
|
if (typeof countArg !== 'number') {
|
|
|
|
count = parseInt(countArg)
|
|
|
|
} else {
|
|
|
|
count = countArg
|
|
|
|
}
|
|
|
|
|
2023-07-04 17:07:04 +00:00
|
|
|
if (count < 0) return "OOPS";
|
2023-09-18 21:01:33 +00:00
|
|
|
if (count == 0) return 0;
|
2023-07-04 17:07:04 +00:00
|
|
|
|
2023-07-05 14:15:36 +00:00
|
|
|
let firstPrev = 1;
|
|
|
|
let secondPrev = 0;
|
2023-11-08 02:27:27 +00:00
|
|
|
|
2023-07-04 17:07:04 +00:00
|
|
|
for (let i = 2; i <= count; i++) {
|
2023-07-06 14:47:20 +00:00
|
|
|
let current = firstPrev + secondPrev;
|
2023-07-05 14:15:36 +00:00
|
|
|
secondPrev = firstPrev;
|
2023-07-06 14:47:20 +00:00
|
|
|
firstPrev = current;
|
2023-07-04 17:07:04 +00:00
|
|
|
}
|
|
|
|
|
2023-07-05 14:15:36 +00:00
|
|
|
return firstPrev;
|
2023-11-08 02:27:27 +00:00
|
|
|
|
2022-02-20 19:07:44 +00:00
|
|
|
};
|
|
|
|
|
2023-11-08 02:27:27 +00:00
|
|
|
// Another way to do it is by using an iterative approach with an array containing two values, 0 and 1.
|
|
|
|
// const fib = [0, 1];
|
|
|
|
// for (let i = 2; i <= count; i++) {
|
|
|
|
// fib[i] = fib[i - 1] + fib[i - 2];
|
|
|
|
// }
|
|
|
|
// return fib[count];
|
|
|
|
|
2022-02-20 19:07:44 +00:00
|
|
|
module.exports = fibonacci;
|