( compute factorial recursively )
( take x as input, return x! and x as output )
: fact-help
dup if
1 - ( leave x-1 on top )
fact-help ( leave x-1, [x-1]! )
1 + ( leave x, [x-1]!, x )
swap over swap ( leave [x-1]!, x, x )
* ( into x!, x )
swap ( into x, x! )
else
1 swap
then
;
: fact
fact-help
drop
;
: demo4
" 4 factorial is: " 4 fact . cr
" 6 factorial is: " 6 fact . cr
;
demo4