int fact(int n) { if (n == 0) { return 1; } else { return n * fact(n - 1); }; } divrem(int x, int y) { (int a, int b) = (x / y, x % y); return (a, b); } int impfact(int n) { int ret = 1; while(n > 1) { ret = ret * n; n = n - 1; }; return ret; } int factacc(int n, int a) { if (n == 0) { return a; } else { return factacc(n - 1, n * a); }; } int fact2(int n) { return factacc(n, 1); } int fib_h(int n, int a, int b) { if(n == 0) { return a; } else { return fib_h(n - 1, b, a + b); }; } int fib(int n) { return fib_h(n, 0, 1); } fibfact(int n) { return (fib(n), fact(n)); } void printFibUpTo(int n) { int x = 0; while(x < n) { printLine(intToString(fib(x))); x = x + 1; }; }