04_recursion.c (461B)
1 /* Recursion and the call/spill machinery: fib + a small Ackermann. 2 * Returns a value in [0,127]. */ 3 static long fib(int n) { 4 if (n < 2) return n; 5 return fib(n - 1) + fib(n - 2); 6 } 7 8 static int ack(int m, int n) { 9 if (m == 0) return n + 1; 10 if (n == 0) return ack(m - 1, 1); 11 return ack(m - 1, ack(m, n - 1)); 12 } 13 14 int bounce_main(void) { 15 long s = fib(20); /* 6765 */ 16 s += ack(2, 3); /* 9 */ 17 s += ack(3, 3); /* 61 */ 18 return (int)(s & 0x7f); 19 }