Fatorial de um Número Crie um algoritmo que receba um número inteiro positivo
e calcule o seu fatorial
. O fatorial de um número é o produto de todos os inteiros positivos menores ou iguais a ele.
- Lembrete Matemático:
(por definição)
- Desafio: Tente implementar utilizando uma estrutura de repetição (loop) que acumule o produto.
Passo 1
O que o problema pede e as informações que temos:
- Pede-se criar um algoritmo que receba um número inteiro positivo
e calcule o fatorial . - Definição importante (dada no enunciado): o fatorial é o produto de todos os inteiros positivos menores ou iguais ao número.
- Anotações úteis que o enunciado lembrou:
- Para
vale por definição . - Para
temos .
- Para
- Condição implícita: o algoritmo deve lidar com números inteiros não-negativos. Se a entrada for negativa o fatorial não é definido (para este exercício devemos tratar como erro ou indicar entrada inválida).
- O desafio extra: implementar usando uma estrutura de repetição (loop) que acumule o produto — é exatamente o que vamos fazer.
Passo 2
Ideia geral do método (sem calcular ainda): usar um acumulador e um loop.
- Conceito do acumulador: é uma variável que guarda o resultado parcial à medida que repetimos passos. Para produto usamos um acumulador inicializado em
(porque multiplicar por não altera o resultado). - Estrutura de repetição: vamos percorrer os inteiros de
até e multiplicar o acumulador pelo índice atual em cada iteração. - Vantagem: este método é simples, fácil de implementar na prova e funciona em
multiplicações.
Passo 3
Regras e fórmula que vamos usar (explicando cada símbolo):
- A definição do fatorial para
é
Aqui:
-
é o número inteiro de entrada. -
é o resultado pedido. - O produto começa em
porque é o menor inteiro positivo e serve como identidade multiplicativa. - Caso especial:
- Se a entrada for
então o fatorial, para este contexto, será tratado como inválido.
Passo 4
Descrição passo a passo do algoritmo (versão verbal que dá para escrever na prova):
- Ler o inteiro
. - Se
, devolver um erro ou mensagem “entrada inválida” (porque fatorial não está definido aqui). - Se
, devolver (caso especial). - Caso
: - Inicializar
. - Para
variando de até (isto é, ): - Atualizar
.
- Atualizar
- Ao final do loop,
contém . Retornar .
- Inicializar
Explicando cada linha de lógica para você entender na prova:
- Por que iniciar
em ? Porque é a identidade da multiplicação: multiplicar por não altera o valor inicial e permite acumular corretamente. - Por que o loop vai de
até ? Porque a definição do fatorial multiplica exatamente esses inteiros. - O teste
vem antes para evitar que o loop rode de modo inútil (o loop de a não faria sentido) e para aplicar a definição .
Passo 5
Exemplo passo a passo com
(fazendo as contas como se estivesse na prova):
- Inicialmente
. - Iteração
: . - Iteração
: . - Iteração
: . - Iteração
: . - Iteração
: . - Resultado:
.
Isso mostra como “acumular o produto” passo a passo — decorre naturalmente do loop.
Passo 6
Exemplo com
:
- Verificamos
e, por definição, devolvemos . Sem loop.
Passo 7
Cuidados e observações práticas (ótimas para você lembrar na prova):
- Entrada inválida: se
for negativo, indique “entrada inválida”. - Crescimento rápido:
cresce muito rápido; para valores grandes ele fica enorme. Em implementações reais, pode estourar o tipo inteiro da linguagem (overflow). Na prova, se pedirem apenas o algoritmo, basta mencionar isso; se pedirem cálculo manual, normalmente será pequeno. - Complexidade: tempo
(fazemos multiplicações). Memória adicional (apenas o acumulador e o índice). - Alternativa: existe solução recursiva (definida por
com ), mas a versão iterativa evita profundidade de pilha e é preferida em provas quando pedem loop.
Passo 8
Pseudocódigo didático (escreva isso na prova ou implemente em qualquer linguagem):
- Entrada: inteiro
. - Saída: valor de
ou mensagem de erro se .
Algoritmo em palavras formais:
- Ler
. - Se
então escrever “Entrada inválida” e terminar. - Se
então escrever e terminar. -
. - Para
de até faça: -
.
-
- Escrever
.
Exemplo rápido de implementação em Python (só para referência; na prova costuma pedir pseudocódigo):
def fatorial(N):
if N < 0:
raise ValueError("Entrada inválida: N deve ser não-negativo")
produto = 1
for i in range(1, N+1):
produto *= i
return produto
Resposta
- Entrada:
(inteiro). - Se
então “Entrada inválida”. - Se
então retorne . - Caso contrário:
-
- Para
até : - Retorne
-