1 // The Computer Language Shootout
2 // http://shootout.alioth.debian.org/
3 // recursive test, by bearophile, Jan 24 2006
4 // Compile with: -O3 -s -fomit-frame-pointer -funroll-loops
8 int Ack(int x, int y) {
13 return Ack(x-1, Ack(x, y-1));
19 return Fib(n-2) + Fib(n-1);
22 double FibFP(double n) {
25 return FibFP(n-2.0) + FibFP(n-1.0);
28 int Tak(int x, int y, int z) {
29 printf("X %d Y %d Z %d\n", x, y, z);
31 return Tak( Tak(x-1, y, z), Tak(y-1, z, x), Tak(z-1, x, y) );
35 double TakFP(double x, double y, double z) {
37 return TakFP( TakFP(x-1.0, y, z), TakFP(y-1.0, z, x), TakFP(z-1.0, x, y) );
41 int main(int argc, char **argv) {
45 n = atoi(argv[1]) - 1;
46 printf("Ack(3,%d): %d\n", n+1, Ack(3, n+1));
47 printf("Fib(%.1f): %.1f\n", 28.0+n, FibFP(28.0+n));
48 printf("Tak(%d,%d,%d): %d\n", 3*n, 2*n, n, Tak(3*n, 2*n, n));
50 fprintf(stderr, "Fib(3): %d\n", Fib(3));
51 fprintf(stderr, "Tak(3.0,2.0,1.0): %.1f\n", TakFP(3.0, 2.0, 1.0));