Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / shootout / recursive.jruby-2.jruby
blob26c0bcc5544e81d2e3344236cce7fb606cf76272
1 # ----------------------------------------------------------------------
2 # The Computer Language Shootout
3 # http://shootout.alioth.debian.org/
5 # Code based on / inspired by existing, relevant Shootout submissions
7 # Contributed by Anthony Borla
8 # Optimized by Jesse Millikan
9 # ----------------------------------------------------------------------
11 def ack(m, n)
12   if m == 0 then 
13     n + 1
14   else if n == 0 then
15     ack(m - 1, 1)
16    else 
17      ack(m - 1, ack(m, n - 1))
18    end
19   end
20 end
22 # ---------------------------------
24 def fib(n)
25    if n > 1 then
26      fib(n - 2) + fib(n - 1) 
27    else 
28      1
29    end
30 end
32 # ---------------------------------
34 def tak(x, y, z)
35   if y < x then
36    tak(tak(x - 1.0, y, z), tak(y - 1.0, z, x), tak(z - 1.0, x, y))
37   else z
38   end
39 end
41 # ---------------------------------
43 n = (ARGV.shift || 1).to_i
45 printf("Ack(3,%d): %d\n", n, ack(3, n));
46 printf("Fib(%.1f): %.1f\n", 27.0 + n, fib(27.0 + n));
48 n -= 1;
49 printf("Tak(%d,%d,%d): %d\n", n * 3, n * 2, n, tak(n * 3, n * 2, n));
51 printf("Fib(3): %d\n", fib(3));
52 printf("Tak(3.0,2.0,1.0): %.1f\n", tak(3.0, 2.0, 1.0));