kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }