Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 23rd, 2012  |  syntax: None  |  size: 1.17 KB  |  hits: 4  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/env node
  2.  
  3. // usage:
  4. // $ time ./fibonacci.js 40
  5. // 0.  40 :  165580141
  6. // 0.  40 :  165580141
  7. // 5ms 3259ms
  8. //
  9. // real     0m3.310s
  10. // user     0m3.301s
  11. // system   0m0.017s
  12.  
  13. //fibonacci(40)
  14. //fibonacci2(40)
  15.  
  16. function fibonacci(n) {
  17.   var res;
  18.   if (fibonacci.stack[n]) return fibonacci.stack[n];
  19.   if (n < 2)
  20.     res = 1;
  21.   else
  22.     res = fibonacci(n - 2) + fibonacci(n - 1);
  23.  
  24.   return (fibonacci.stack[n] = res);
  25. }
  26. fibonacci.stack = {};
  27.  
  28. function fibonacci2(n) {
  29.   if (n < 2) return 1;
  30.   return fibonacci2(n - 2) + fibonacci2(n - 1);
  31. }
  32.  
  33. function  fibonacci3(n) {
  34.   n = n || 1;
  35.   var t = 1, i = 1, n1 = 0, n2 = 1;
  36.   for (; i <= n; i++) {
  37.     t = n2 + n1;
  38.     n1 = n2;
  39.     n2 = i < 2 ? 1 : t;
  40.   }
  41.   return t;
  42. }
  43.  
  44. var ns = process.argv.slice(2);
  45.  
  46. var s1 = Date.now();
  47.  
  48. ns.forEach(function (n, i) {
  49.   console.log(i + '. ', n, ': ', fibonacci(n));
  50. });
  51.  
  52. var s2 = Date.now();
  53.  
  54. var t1 = s2 - s1;
  55.  
  56. ns.forEach(function (n, i) {
  57.   console.log(i + '. ', n, ': ', fibonacci3(n));
  58. });
  59.  
  60. var s3 = Date.now();
  61.  
  62. var t2 = s3 - s2;
  63.  
  64. ns.forEach(function (n, i) {
  65.   console.log(i + '. ', n, ': ', fibonacci2(n));
  66. });
  67.  
  68. var s4 = Date.now();
  69.  
  70. var t3 = s4 - s3;
  71.  
  72. console.log(t1 + 'ms', t2 + 'ms', t3 + 'ms');