14 outubro, 2021
\[ 5! = 5 \times 4 \times 3 \times 2 \times 1 = 120 \] \[ 1! = 0! = 1 \] Na prática: \(f(n) = n \times (n - 1) \times (n - 2) ...\)
factorial()!fatorial1 <- function(n) {
if (!is.numeric(n)) stop("n deve ser numérico!", call. = FALSE)
if (n == 0 || n == 1) return(1)
prod(1:n)
}
fatorial2 <- function(n) {
if (!is.numeric(n)) stop("n deve ser numérico!", call. = FALSE)
if (n == 0 || n == 1) return(1)
# Usando o loop
aux <- 1
for(i in 2:n) {
aux <- i * aux
}
return(aux)
}
factorial(5)
## [1] 120
fatorial1(5)
## [1] 120
fatorial2(5)
## [1] 120
Exemplo anterior: \[ \begin{align*} 5! & = 5 & \times & 4 & \times & 3 & \times & 2 & \times & 1\\ f(n) & = n & \times & n - 1 & \times & (n - 1) - 1 & \times & (n - 2) - 1 & \times & (n - 3) - 1\\ \end{align*} \] Em R:
fatorial3 <- function(n) {
if (!is.numeric(n)) stop("n deve ser numérico!", call. = FALSE)
if (n == 0 || n == 1) return(1)
return(n * fatorial3(n - 1))
}
# Chamando fatorial3(5)
fatorial3(5)
# O que ocorre nos bastidores do R
fatorial3(5)
|
--> 5 * fatorial3(4)
|
--> 4 * fatorial3(3)
|
--> 3 * fatorial3(2)
|
--> 2 * fatorial3(1)
|
--> 1 * return(1) # Importantíssimo!
|
--> fechamento de fatorial3()
fatorial3(5)
## [1] 120