#!/usr/bin/perl use strict; print "ackermann($ARGV[0], $ARGV[1])\n"; print ackermann($ARGV[0], $ARGV[1]); sub ackermann { my ($x, $y) = @_; my @stack = (); while((defined $x and $x > 0) || ((scalar @stack) != 0)) { if($x == 0) { $x = pop @stack, $y++; } elsif($y == 0) { $y = 1, $x--; } else { $y--, push @stack, ($x-1); } } return ($y + 1); }