[Richard Suchenwirth] 2004-02-08 - Factorial (n!) is a popular function with super-exponential growth. Mathematically put, 0! = 1 n! = n (n-1)! if n >0, else undefined In Tcl, we can have it pretty similarly: proc fact n {expr {$n<2? 1: $n * [fact [incr n -1]]}} But this very soon crosses the limits of integers, giving wrong results. Weekend reading in an older math book showed me the Stirling approximation to n! for large n (at Tcl's precisions, "large" is > 20 ...), so I built that in: proc fact n {expr { $n<2? 1: $n>20? pow($n,$n)*exp(-$n)*sqrt(2*acos(-1)*$n): wide($n)*[fact [incr n -1]]} } Just in case somebody needs approximated large factorials... But for n>143 we reach the domain limit of floating point numbers, for which I can offer no way out :( ---- See also [Factorial using event loop] ---- [Category Concept] | [Arts and crafts of Tcl-Tk programming]