tests/perl/common/src/ackermann.pl
#!/usr/local/bin/perl
# $Id: ackermann.pl,v 1.2 2003/12/30 01:21:23 davidw Exp $
# http://www.bagley.org/~doug/shootout/
use integer;
# It's prettier but slower to do this
#sub Ack {
# my($M, $N) = @_;
# return( $N + 1 ) if ($M == 0);
# return( Ack($M - 1, 1) ) if ($N == 0);
# Ack($M - 1, Ack($M, $N - 1));
#}
# in our quest for speed, we must get ugly:
# it helps reduce stack frame size a little bit
# from Leif Stensson
# END COMMENT
sub Ack {
return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1))
: Ack($_[0]-1, 1))
: $_[1]+1;
}
my $NUM = $ARGV[0];
$NUM = 1 if ($NUM < 1);
my $ack = Ack(3, $NUM);
print "Ack(3,$NUM): $ack\n";
Generated by GNU enscript 1.6.3.