fork download
  1.  
  2. var pr = print;//console.log;
  3.  
  4. function timeDiff(startTime, digits) {
  5. digits = digits || 1;
  6. return ((Date.now()-startTime)/1000).toFixed(digits)+'s';
  7. }
  8.  
  9. function fib(n) {
  10. if (n < 2) return 1;
  11. else return fib(n-1)+fib(n-2);
  12. }
  13.  
  14. function memo(fn) {
  15. var cache = {};
  16. return function() {
  17. var args = JSON.stringify(arguments);
  18. if (cache.hasOwnProperty(args)) {
  19. return cache[args];
  20. } else {
  21. var result = fn.apply(this, arguments);
  22. cache[args] = result;
  23. return result;
  24. }
  25. }
  26. }
  27.  
  28. function testFn(fn, nmax, nmin=0) {
  29. for (var i=0; i <= nmax; i++) {
  30. var t = Date.now();
  31. var result = fib(i);
  32. pr('n:',i, result, 'time:',timeDiff(t,3),'sec');
  33. }
  34. }
  35.  
  36. pr('SIMPLE');
  37. testFn(fib, 40);
  38.  
  39. fib = memo(fib);
  40.  
  41. pr('MEMOIZED');
  42. testFn(fib, 40);
Success #stdin #stdout 3.98s 30320KB
stdin
Standard input is empty
stdout
SIMPLE
n: 0 1 time: 0.006s sec
n: 1 1 time: 0.000s sec
n: 2 2 time: 0.000s sec
n: 3 3 time: 0.000s sec
n: 4 5 time: 0.001s sec
n: 5 8 time: 0.000s sec
n: 6 13 time: 0.000s sec
n: 7 21 time: 0.000s sec
n: 8 34 time: 0.000s sec
n: 9 55 time: 0.000s sec
n: 10 89 time: 0.000s sec
n: 11 144 time: 0.000s sec
n: 12 233 time: 0.028s sec
n: 13 377 time: 0.000s sec
n: 14 610 time: 0.000s sec
n: 15 987 time: 0.000s sec
n: 16 1597 time: 0.000s sec
n: 17 2584 time: 0.000s sec
n: 18 4181 time: 0.000s sec
n: 19 6765 time: 0.000s sec
n: 20 10946 time: 0.000s sec
n: 21 17711 time: 0.000s sec
n: 22 28657 time: 0.001s sec
n: 23 46368 time: 0.001s sec
n: 24 75025 time: 0.001s sec
n: 25 121393 time: 0.003s sec
n: 26 196418 time: 0.003s sec
n: 27 317811 time: 0.006s sec
n: 28 514229 time: 0.005s sec
n: 29 832040 time: 0.008s sec
n: 30 1346269 time: 0.012s sec
n: 31 2178309 time: 0.019s sec
n: 32 3524578 time: 0.034s sec
n: 33 5702887 time: 0.054s sec
n: 34 9227465 time: 0.088s sec
n: 35 14930352 time: 0.138s sec
n: 36 24157817 time: 0.226s sec
n: 37 39088169 time: 0.355s sec
n: 38 63245986 time: 0.574s sec
n: 39 102334155 time: 0.928s sec
n: 40 165580141 time: 1.504s sec
MEMOIZED
n: 0 1 time: 0.001s sec
n: 1 1 time: 0.000s sec
n: 2 2 time: 0.000s sec
n: 3 3 time: 0.000s sec
n: 4 5 time: 0.000s sec
n: 5 8 time: 0.000s sec
n: 6 13 time: 0.000s sec
n: 7 21 time: 0.000s sec
n: 8 34 time: 0.000s sec
n: 9 55 time: 0.000s sec
n: 10 89 time: 0.000s sec
n: 11 144 time: 0.000s sec
n: 12 233 time: 0.000s sec
n: 13 377 time: 0.000s sec
n: 14 610 time: 0.000s sec
n: 15 987 time: 0.000s sec
n: 16 1597 time: 0.001s sec
n: 17 2584 time: 0.000s sec
n: 18 4181 time: 0.000s sec
n: 19 6765 time: 0.000s sec
n: 20 10946 time: 0.000s sec
n: 21 17711 time: 0.000s sec
n: 22 28657 time: 0.000s sec
n: 23 46368 time: 0.000s sec
n: 24 75025 time: 0.000s sec
n: 25 121393 time: 0.000s sec
n: 26 196418 time: 0.000s sec
n: 27 317811 time: 0.000s sec
n: 28 514229 time: 0.000s sec
n: 29 832040 time: 0.000s sec
n: 30 1346269 time: 0.000s sec
n: 31 2178309 time: 0.000s sec
n: 32 3524578 time: 0.000s sec
n: 33 5702887 time: 0.000s sec
n: 34 9227465 time: 0.000s sec
n: 35 14930352 time: 0.000s sec
n: 36 24157817 time: 0.000s sec
n: 37 39088169 time: 0.000s sec
n: 38 63245986 time: 0.000s sec
n: 39 102334155 time: 0.000s sec
n: 40 165580141 time: 0.000s sec