sub factorial {
my ($n) = @_;
if ($n == 0) {
return 1;
}
return $n * factorial($n - 1);
}
####
sub factorial {
my ($n, $accumulator) = @_;
$accumulator ||= 1;
if ($n == 0) {
return $accumulator;
}
return factorial($n - 1, $n * $accumulator);
}
##
##
call factorial ...
call factorial ...
call factorial ...
call factorial ...
return
return
return
return
##
##
call factorial ...
change args and reloop ...
change args and reloop ...
change args and reloop ...
return
##
##
sub factorial {
my ($n, $accumulator) = @_;
$accumulator ||= 1;
LOOP:
if ($n == 0) {
return $accumulator;
}
$accumulator *= $n;
$n--;
goto LOOP;
}