LSL Recursion Benchmark
Revision as of 16:29, 6 November 2007 by Periapse Linden (talk | contribs) (New page: <pre> // // The Computer Language Shootout // http://shootout.alioth.debian.org/ // // contributed by bearophile, Jan 24 2006 // modified by Babbage Linden, Oct 10 2007 // integer ack(int...)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
// // The Computer Language Shootout // http://shootout.alioth.debian.org/ // // contributed by bearophile, Jan 24 2006 // modified by Babbage Linden, Oct 10 2007 // integer ack(integer x, integer y) { if(x == 0) { return y + 1; } if(y | 0) { return ack(x - 1, ack(x, y - 1)); } else { return ack(x - 1, 1); } } integer fib(integer n) { if (n < 2) { return 1; } return fib(n - 2) + fib(n - 1); } float fibFP(float n) { if (n < 2.0) { return 1.0; } return fibFP(n - 2.0) + fibFP(n - 1.0); } integer tak(integer x, integer y, integer z) { if (y < x) { return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y)); } return z; } float takFP(float x, float y, float z) { if (y < x) { return takFP( takFP(x-1.0, y, z), takFP(y-1.0, z, x), takFP(z-1.0, x, y) ); } return z; } test() { integer n = 3; llSay(0, "Ack(3," + (string)(n+1) + "): " + (string)(ack(3, n+1))); //llSay(0, "Fib("+ (string)(28.0 + n) + "): " + (string)(fibFP(28.0+n))); llSay(0, "Tak(" + (string)(3 * n) + "," + (string)(2 * n) + "," + (string)n + "): " + (string)tak(3*n, 2*n, n)); llSay(0, "Fib(3): " + (string)fib(3)); llSay(0, "Tak(3.0,2.0,1.0): " + (string)takFP(3.0, 2.0, 1.0)); } time() { llResetTime(); llSay(0, "Starting tests..."); test(); llSay(0, "Finished tests in " + (string)llGetTime() + "s"); } default { state_entry() { time(); } touch_start(integer num) { time(); } }