Skip to content

Instantly share code, notes, and snippets.

@skilbjo
Created May 19, 2016 02:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skilbjo/9b6caab15a7dbfc8e12a1983b18a0c43 to your computer and use it in GitHub Desktop.
Save skilbjo/9b6caab15a7dbfc8e12a1983b18a0c43 to your computer and use it in GitHub Desktop.
Fibonacci sequences & profiling!
// Recursive => Funcational, yay! But dat runtime doe.. :(
var recursive_fib = function(n){
if(n<=1) return n;
return recursive_fib(n-2) + recursive_fib(n-1);
};
// Recursive w/ memoization (caching) => Funcational + performant!
var recursive_memo_fib = function(n){
var f = function(n,cache){
if( cache[n] ) {
return cache[n];
} else {
if(n<=2) return cache[n];
cache[n] = ( (n-1>=3 ? f(n-1,cache)[n-1] : f(n-1,cache) ) +
f(n-2,cache)
);
return cache;
}
};
return f(n,{0:0,1:1,2:1})[n];
};
// Iterative => Boring !
var iterative_fib = function(n){
var fib = 1, current = 0, prev = 1;
for(var i=2; i<=n;i++){
fib = prev + current;
current = prev;
prev = fib;
}
return fib;
};
var n = 34;
var hrstart_recursive_fib = process.hrtime();
recursive_fib(n);
var hrend_recursive_fib = process.hrtime(hrstart_recursive_fib);
var hrstart_recursive_memo_fib = process.hrtime();
recursive_memo_fib(n);
var hrend_recursive_memo_fib = process.hrtime(hrstart_recursive_memo_fib);
var hrstart_iterative_fib = process.hrtime();
iterative_fib(n);
var hrend_iterative_fib = process.hrtime(hrstart_iterative_fib);
console.info('Recursive: %d ms', hrend_recursive_fib[1]/1000000);
console.info('Memoization: %d ms', hrend_recursive_memo_fib[1]/1000000);
console.info('Iterative: %d ms', hrend_iterative_fib[1]/1000000);
// Results =>
// Recursive: 82.507861 ms
// Memoization: 0.32665 ms
// Iterative: 0.067584 ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment