use warnings; use strict; sub A { return 0 if $_[1] == 0; return 2*$_[1] if $_[0] == 0; return 2 if $_[1] == 1; # figure A(m-1, A(m, n-1)) using in-place parameter list to save stack. --$_[1]; $_[1]= &A; --$_[0]; return &A; } print A ($ARGV[0], $ARGV[1]);