Ci sono essenzialmente due modi di implementare una funzione fattoriale. Il modo ricorsivo e quello non ricorsivo.
Una funzione ricorsiva è una funzione che richiama sè stessa, ad es:
fatt <- function(x)
{
ifelse(x == 1, 1, x * fatt(x-1))
}
In questo caso la funzione restituisce 1 quando viene passato 1 e x * fatt(x-1) quando viene passato un altro numero. Questo in pratica considera n! come: n! = n * (n-1)! = n * (n-1) * (n-2)! = .... = n * (n-1) * (n-2) * (n-3) * ... * 1
Lo svantaggio delle funzioni ricorsive è che carichi lo stack di chiamate alla stessa funzione e quindi per valori grandi la funzione può rallentare molto o addirittura fallire.
Il modo non ricorsivo è forse meno "elegante", ma usa semplicemente un ciclo for:
fatt <- function(n)
{
result <- 1;
for (i in n:1)
{
result <- i * result
}
return(result)
}