Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pulse

Fatorial quádruplo

Recommended Posts

O fatorial quádruplo de um número N é dado por (2n)!/(n)!

 

Faça uma função recursiva que receba um número inteiro positivo N e retorne o fatorial quádruplo desse número.

#include <stdio.h>

int fatorial(int n)
{
    if(n>0)
    {
        return n*fatorial(n-1);
    }
    else
    {
        return 1;
    }
}
int main ()
{
    int n, fat;

    printf("Digite n");
    scanf("%d", &n);

    fat = fatorial(2*n) / fatorial(n);

    printf("Fatorial quadruplo de %d eh: %d", n, fat);
}

Na verdade deste jeito que eu fiz consigo obter o resultado correto e tudo, mas acho que segue um pouco a proposta do exercício. Há alguma forma de resolver que já tenha como retorno o resultado final do fatorial quádruplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare no seguinte:

(2n)! 2n * (2n-1)*(2n-2) * ... * n * (n-1) * (n-2) * ... * 1
------ = ----------------------------------------------------------- = 2n * (2n-1) * (2n-2) *.... * (n+1)
n! n * (n-1) * (n-2) * ... * 1

 

Com isso você já pode cortar várias multiplicações desnecessárias.

Mas você pode reescrever isso de outra forma (já que sabemos que o último número é n+1):

(n+1) * (n+2) * (n+3) * (n+4) * ... * (n+n-1) + (n+n)

 

Mesmo com o fatorial simples, você possui o produto de uma progressão aritmética de razão 1.

 

Pesquisando um pouco você encontra isso:
https://en.wikipedia.org/wiki/Arithmetic_progression#Product
http://mathworld.wolfram.com/RisingFactorial.html

Exemplo:
Calcular o fatorial quádruplo de n=8.

Fazendo na mão depois da simplificação mostrada anteriormente: 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 = 518918400

Usando a fórmula com a função gamma:

#include <math.h>
#include <stdio.h>

int main(void) {
	unsigned long long n = 14;
	printf("%llu\n", (unsigned long long)(tgamma(2*n+1)/tgamma(n+1)));
	printf("%Lf\n", (long double)(tgamma(2*n+1)/tgamma(n+1)));
	return 0;
}

http://en.cppreference.com/w/c/numeric/math/tgamma

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.