# A classic, recursive soulution. sub Rfactorial { my $i = shift; return 1 if $i == 0; return 1 if $i == 1; return $i * Rfactorial($i - 1); } #### # Tail recursive sub factorial { my $n = shift; return 0 unless $n > 0; fact( $n, 1 ); sub fact { my($n, $a) = @_; return $a unless $n > 1; fact( $n-1, $n*$a ); } }