Fatorial (recursão)
Faça um algoritmo que calcule o fatorial
Exercício de lógica de programação
Faça um programa que calcule o fatorial de um número qualquer.
Vamos lembrar o que é o fatorial?
Seja n
um número natural, tal que n
>= 2, chama-se fatorial de n
o produto de todos os números naturais
consecutivos de n
até 1.
Por exemplo,
5! = 1 x 2 x 3 x 4 x 5 = 120
Veja mais alguns resultados e que você poderá utilizar como testes:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
Atente que 0! = 1
porque o produto vazio (produto de nenhum número) é 1
.
Agora é só trabalhar, não vale ver as respostas!!!!
Resultados
Vamos iniciar as soluções em JavaScript só que sem recursividade, só para termos um comparativo de como ficaria a solução de forma iterativa (sem recursão).
var assert = require('assert');
function fatorial(n) {
if (n == 0) {
return 1;
}
var resp = n;
while (n > 2) {
resp *= --n;
}
return resp;
}
try {
assert.equal(1, fatorial(0));
assert.equal(1, fatorial(1));
assert.equal(2, fatorial(2));
assert.equal(6, fatorial(3));
assert.equal(24, fatorial(4));
assert.equal(120, fatorial(5));
assert.equal(720, fatorial(6));
} catch(e) {
console.log(e);
}
Solução em C…
#include <stdio.h>
#include <assert.h>
int fatorial(int n) {
if (n == 0)
return 1;
else
return (n * fatorial(n - 1));
}
int main() {
assert(1 == fatorial(0));
assert(1 == fatorial(1));
assert(2 == fatorial(2));
assert(6 == fatorial(3));
assert(24 == fatorial(4));
assert(120 == fatorial(5));
assert(720 == fatorial(6));
return 0;
}
Solução em Python…
# -*- coding: utf-8 -*-
def fatorial(n):
if n <= 1:
return 1
else:
return n * fatorial(n - 1)
assert 1 == fatorial(0)
assert 1 == fatorial(1)
assert 2 == fatorial(2)
assert 6 == fatorial(3)
assert 24 == fatorial(4)
assert 120 == fatorial(5)
assert 720 == fatorial(6)