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) ] ]