On Mon, Apr 8, 2013 at 9:34 PM, Bradley Lucier <luc...@math.purdue.edu>wrote:

> (define (iota m n)
>  (let loop ((result '())
>              (n (- n 1)))
>    (if (<= m n)
>         (loop (cons n result)
>               (- n 1))
>         result)))
>
> (define (partial-factorial m n)
>  ;; computes the product (m+1) * ... * (n-1) * n
>  (if (< (- n m) 10)
>      (apply * (iota (+ m 1) (+ n 1)))
>      (* (partial-factorial m (quotient (+ m n) 2))
>         (partial-factorial (quotient (+ m n) 2) n))))
>
> (define (factorial n)
>  (partial-factorial 0 n))
>
> In Gambit, even in the interpreter, this is pretty fast:
>
> (define a (time (factorial 1000000)))
> (time (factorial 1000000))
>


Indeed, it's impressively fast!
% racket fast-factorial.rkt
cpu time: 5760 real time: 5771 gc time: 28

Probably this should replace the default factorial version then.

Laurent
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to