In Perl possono anche essere definite delle funzioni ricosive, ossia
delle funzioni che possono richiamare se stesse per produrre il risultato
desiderato.
Ad esempio supponiamo di voler calcolare il fattoriale di un numero intero;
il fattoriale di n è quella funzione che restituisce il prodotto dei
numeri da 2 ad n. Possiamo definire due subroutine diverse per
calcolare il fattoriale di $n$, una iterativa ed una ricorsiva:
#!/usr/local/bin/perl
# fattoriale.pl
sub fattoriale_1 {
local($i, $n, $f);
$n = shift(@_);
$f = $n;
for ($i=$n -1; $i>1; $i--) {
$f = $f*$i;
}
return($f);
}
sub fattoriale_2 {
local($n) = shift(@_);
($n == 1) && return(1);
return($n * &fattoriale_2($n-1));
}
$n = <STDIN>;
$f1 = &fattoriale_1($n);
$f2 = &fattoriale_2($n);
print "fattoriale iterativo = $f1\n";
print "fattoriale ricorsivo = $f2\n";