[N|Integer?(N)] factorial(n: N) { if (n == 0) return N(1); return n * factorial(n - 1); }