Skip to content

DessimA/fatorial-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cálculo Fatorial em JavaScript: Uma Demonstração de Abordagens

Este projeto simples, porém didático, explora diferentes maneiras de calcular o fatorial de um número utilizando JavaScript, apresentando desde a implementação mais básica até uma solução robusta que lida com desafios comuns da programação, como a precisão de números grandes.

O Que é Fatorial?

O fatorial de um número inteiro não negativo n, denotado por n!, é o produto de todos os inteiros positivos menores ou iguais a n. Por exemplo, 5! (lê-se "cinco fatorial") é calculado como 5 × 4 × 3 × 2 × 1, resultando em 120. Existem duas regras especiais importantes: 1! é igual a 1, e 0! também é igual a 1, uma convenção matemática crucial para a consistência de fórmulas e algoritmos.

O Problema do Cálculo de Fatorial na Programação

Embora o conceito de fatorial seja simples, sua implementação em linguagens de programação como JavaScript pode apresentar desafios, especialmente quando lidamos com números grandes. Os tipos numéricos padrão em JavaScript têm um limite de precisão, o que significa que fatoriais de números relativamente pequenos (acima de 20, por exemplo) podem resultar em valores imprecisos ou em notação científica, perdendo a exatidão necessária para muitas aplicações. Além disso, a validação da entrada do usuário é fundamental para evitar cálculos incorretos ou erros inesperados no programa.

As Diferentes Abordagens Implementadas

Este projeto demonstra três níveis de implementação para o cálculo de fatorial, cada um abordando o problema com diferentes graus de complexidade e robustez:

1. Implementação Simples (fatorialSimples)

Esta é a forma mais direta de calcular o fatorial, multiplicando sequencialmente os números de 1 até n. É fácil de entender, mas não inclui validações de entrada, nem lida com as limitações de precisão para números grandes, retornando resultados imprecisos ou em notação científica para valores maiores que 20.

function fatorialSimples(n) {
  let resultado = 1;
  for (let i = 2; i <= n; i++) {
    resultado = resultado * i;
  }
  return resultado;
}

2. Implementação com Validação (fatorialValidado)

Esta abordagem aprimora a versão simples ao adicionar validações básicas para a entrada. Ela verifica se o número é não negativo e se é um inteiro, lançando erros claros caso a entrada seja inválida. Contudo, a lógica de cálculo permanece a mesma, o que significa que as limitações de precisão para números grandes ainda persistem.

function fatorialValidado(n) {
  if (n < 0) {
    throw new Error("Número não pode ser negativo");
  }
  if (!Number.isInteger(n)) {
    throw new Error("Deve ser um número inteiro");
  }
  let resultado = 1;
  for (let i = 2; i <= n; i++) {
    resultado = resultado * i;
  }
  return resultado;
}

3. Implementação Profissional (fatorial)

Esta é a solução mais completa e robusta, combinando validação rigorosa com a capacidade de lidar com números extremamente grandes. Para números acima de 20, ela utiliza o tipo BigInt do JavaScript, que permite cálculos com inteiros de precisão arbitrária, garantindo resultados exatos mesmo para fatoriais gigantescos. Para números menores, ela otimiza o desempenho usando o tipo numérico padrão.

function fatorial(n) {
  if (n < 0 || !Number.isInteger(n)) {
    throw new Error("n deve ser um inteiro não negativo");
  }
  if (n === 0 || n === 1) return 1;

  if (n > 20) {
    let resultado = 1n;
    for (let i = 2n; i <= BigInt(n); i++) {
      resultado *= i;
    }
    return resultado;
  }

  let resultado = 1;
  for (let i = 2; i <= n; i++) {
    resultado *= i;
  }
  return resultado;
}

Como Utilizar o Projeto

Para explorar este projeto, basta abrir o arquivo index.html em seu navegador web. A interface intuitiva permite que você insira um número e visualize os resultados das três implementações lado a lado, além de poder inspecionar o código-fonte de cada uma através de abas dedicadas. Experimente com diferentes valores, incluindo números negativos, decimais e grandes, para observar o comportamento de cada função.

Disponível em:

https://fatorial-js.vercel.app/

Estrutura do Projeto

projeto-fatorial/
├── index.html          # Estrutura da página web e interface do usuário
├── script.js           # Lógica JavaScript para cálculo e interação da interface
└── style.css           # Estilos CSS para a apresentação visual da página

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published