recurse.vs 336 Bytes
fact = map (i) [
	? [ i<1 -> ^ 1;
	  |  *  -> ^ i * @ (i-1); ]
]

xfact = map (i) [
	? [ i<1 -> return 1;
	  |  *  -> return i * xfact (i-1); ]
]

program = map () -> () [
	* [ read_bool() -> i := read_int (); write_int (i); write_char(32);
			   write_int (fact (i)); write_char(32);
	   		   write_int (xfact(i)); write_char(10); ] ]