diff --git a/Algorithms/dynamic_programming/fibonacci.js b/Algorithms/dynamic_programming/fibonacci.js new file mode 100644 index 000000000..273d9aac5 --- /dev/null +++ b/Algorithms/dynamic_programming/fibonacci.js @@ -0,0 +1,25 @@ +// Calculates fib(n) such that fib(n) = fib(n - 1) + fib(n - 2) +// fib(0) = fib(1) = 1 +// Uses a bottom up dynamic programming approach +// Solve each subproblem once, using results of previous subproblems, +// which are n-1 and n-2 for Fibonacci numbers + +// Although this algorithm is linear in space and time as a function +// of the input value n, it is exponential in the size of n as +// a function of the number of input bits + +function fib(n) { + var table = []; + table.push(1); + table.push(1); + for (var i = 2; i < n; ++i) { + table.push(table[i - 1] + table[i - 2]); + } + console.log("Fibonacci #%d = %d", n, table[n - 1]); +} + +fib(1); +fib(2); +fib(200); +fib(5); +fib(10);