mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 17:50:39 +08:00
Create Fibonacci.js (#133)
* Create Fibonacci.js * Update Fibonacci.js Co-authored-by: vinayak <itssvinayak@gmail.com>
This commit is contained in:
59
maths/Fibonacci.js
Normal file
59
maths/Fibonacci.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const list = []
|
||||||
|
|
||||||
|
const FibonacciIterative = (nth) => {
|
||||||
|
const sequence = []
|
||||||
|
|
||||||
|
if (nth >= 1) sequence.push(1)
|
||||||
|
if (nth >= 2) sequence.push(1)
|
||||||
|
|
||||||
|
for (let i = 2; i < nth; i++) {
|
||||||
|
sequence.push(sequence[i - 1] + sequence[i - 2])
|
||||||
|
}
|
||||||
|
|
||||||
|
return sequence
|
||||||
|
}
|
||||||
|
|
||||||
|
const FibonacciRecursive = (number) => {
|
||||||
|
return (() => {
|
||||||
|
switch (list.length) {
|
||||||
|
case 0:
|
||||||
|
list.push(1)
|
||||||
|
return FibonacciRecursive(number)
|
||||||
|
case 1:
|
||||||
|
list.push(1)
|
||||||
|
return FibonacciRecursive(number)
|
||||||
|
case number:
|
||||||
|
return list
|
||||||
|
default:
|
||||||
|
list.push(list[list.length - 1] + list[list.length - 2])
|
||||||
|
return FibonacciRecursive(number)
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
|
||||||
|
const dict = new Map()
|
||||||
|
|
||||||
|
const FibonacciRecursiveDP = (stairs) => {
|
||||||
|
if (stairs <= 0) return 0
|
||||||
|
if (stairs === 1) return 1
|
||||||
|
|
||||||
|
// Memoize stair count
|
||||||
|
if (dict.has(stairs)) return dict.get(stairs)
|
||||||
|
|
||||||
|
const res =
|
||||||
|
FibonacciRecursiveDP(stairs - 1) + FibonacciRecursiveDP(stairs - 2)
|
||||||
|
|
||||||
|
dict.set(stairs, res)
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
// testing
|
||||||
|
|
||||||
|
console.log(FibonacciIterative(5))
|
||||||
|
// Output: [ 1, 1, 2, 3, 5 ]
|
||||||
|
console.log(FibonacciRecursive(5))
|
||||||
|
// Output: [ 1, 1, 2, 3, 5 ]
|
||||||
|
|
||||||
|
console.log(FibonacciRecursiveDP(5))
|
||||||
|
// Output: 5
|
Reference in New Issue
Block a user