recurse.s
323 Bytes
fact = map (i) [
? [ i<1 -> ^ 1
| * -> ^ i * @ (i-1) ]
];
xfact = map (i) [
? [ i<1 -> return 1
| * -> return i * xfact (i-1) ]
];
program = map () -> () [
* [ readBool() -> i := readInt (); writeInt (i); writeChar(32);
writeInt (fact (i)); writeChar(32);
writeInt (xfact(i)); writeChar(10) ] ]