factorial recursive vs not recursive vs tail recursive (v3)

Revision 3 of this benchmark created by Kobi on


Preparation HTML

<script>
  /* recursive */
  
  function factorial(n) {
   var result = 1;
   var fac = function(n) {
    return result *= n, n--, (n > 1 ? fac(n) : result);
   };
   return fac(n);
  }
  
  /* non recursive */
  
  function factorialnr(n) {
   var r = n;
   while (--n > 1) {
    r *= r != n ? n : 1;
   }
   return r;
  }
  
  /* tail recursive  */
  
  function factorialtail(n) {
   var fac = function(n, acc) {
    if (n == 0) return acc;
    return fac(n - 1, acc * n);
   };
   return fac(n, 1);
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
recursive
factorial(50)
ready
non recursive
factorialnr(50)
ready
Tail Recursive
factorialtail(50)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.