Left factorials,   !n,   may refer to either   subfactorials   or to   factorial sums;

the same notation can be confusingly seen being used for the two different definitions.

Sometimes,   subfactorials   (also known as derangements)   may use any of the notations:

     !n`   
     !n  
     n¡  


(It may not be visually obvious, but the last example uses an upside-down exclamation mark.)



This Rosetta Code task will be using this formula   (factorial sums)   for   left factorial:


   



!
n
=

∑

k
=
0


n
−
1


k
!


{\displaystyle !n=\sum _{k=0}^{n-1}k!}




 where


   



!
0
=
0


{\displaystyle !0=0}






Task
Display the left factorials for:

   zero through ten     (inclusive)
   20   through   110   (inclusive)   by tens


Display the length (in decimal digits) of the left factorials for:

   1,000   through   10,000   (inclusive), by thousands.


Also see

   The OEIS entry: A003422 left factorials
   The MathWorld entry: left factorial
   The MathWorld entry: factorial sums
   The MathWorld entry: subfactorial


Related task

   permutations/derangements (subfactorials)


#lang racket
(define ! (let ((rv# (make-hash))) (λ (n) (hash-ref! rv# n (λ () (if (= n 0) 1 (* n (! (- n 1)))))))))
 
(define (!n n)
  ;; note that in-range n is from 0 to n-1 inclusive
  (for/sum ((k (in-range n))) (! k)))
 
(define (dnl. s) (for-each displayln s))
(dnl
  "Display the left factorials for:"
  "zero through ten (inclusive)"
  (pretty-format (for/list ((i (in-range 0 (add1 10)))) (!n i)))
  "20 through 110 (inclusive) by tens"
  (pretty-format (for/list ((i (in-range 20 (add1 110) 10))) (!n i)))
  "Display the length (in decimal digits) of the left factorials for:"
  "1,000, 2,000 through 10,000 (inclusive), by thousands."
  (pretty-format (for/list ((i (in-range 1000 10001 1000))) (add1 (order-of-magnitude (!n i))))))