# Factorial in Factor

Example for versions
Factor 0.94

This example uses a purely recursive approach to factorial calculation. Word `factorial`

replaces `n`

with `n!`

on the stack with a side effect: it prints all values of factorial from 0 to `n`

. After `if`

combinator is applied, the stack holds values of `n`

and `n!`

. Words `swap`

and `over`

replace them with `n!`

, `n`

and `n!`

; two latter values are used for printing, and the first one stays on the stack as a return value.

In the main part of the program we need to add `drop`

to remove `16!`

from the stack, so that the effect of the program on the stack is `( -- )`

.

```
USING: formatting kernel math ;
IN: factorial-example
: factorial ( n -- n! )
dup
0 =
[ 1 ]
[ dup dup 1 - factorial * ]
if
swap over "%d! = %d\n" printf ;
16 factorial
drop
```

## Comments

]]>blog comments powered by Disqus

]]>