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