Pulse 0 Denunciar post Postado Junho 14, 2015 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
_Isis_ 202 Denunciar post Postado Junho 14, 2015 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#Producthttp://mathworld.wolfram.com/RisingFactorial.htmlExemplo: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