Faça uma função recursiva que receba um número inteiro positivo N e retorne o hiperfatorial desse número. O hiperfatorial de um número
, escrito
, é definido por
Passo 1
O enunciado pede uma função recursiva que calcule o hiperfatorial de um inteiro positivo N, definido por
Vamos usar o conceito de recursão em programação: toda função recursiva precisa de um caso-base e de uma regra de recorrência.
Passo 2
Para montar a recursão, identificamos o caso-base. Quando N=1 temos
então basta retornar 1 antes de continuar a recursão.
Passo 3
A relação de recorrência vem da própria definição do produto. Se soubermos H(n−1), então
Ou seja, a cada chamada recursiva reduzimos n em 1 e multiplicamos o resultado por
.
Passo 4
Agora codificamos em C (ou pseudocódigo bem próximo) usando um laço interno para calcular
como inteiro e depois a chamada recursiva para
.
Resposta
#include <stdio.h>
// Função recursiva que retorna o hiperfatorial de n
long long hiperfatorial(int n) {
if (n == 1) {
return 1; // caso-base: H(1) = 1
}
// calcula n^n usando um laço para não depender de pow (que retorna double)
long long potencia = 1;
for (int i = 0; i < n; i++) {
potencia *= n;
}
// recursão: H(n) = H(n-1) * n^n
return hiperfatorial(n - 1) * potencia;
}
long long hiperfatorial(int n) {
if (n == 1) {
return 1; // caso-base: H(1) = 1
}
// calcula n^n usando um laço para não depender de pow (que retorna double)
long long potencia = 1;
for (int i = 0; i < n; i++) {
potencia *= n;
}
// recursão: H(n) = H(n-1) * n^n
return hiperfatorial(n - 1) * potencia;
}
int main() {
int N = 5; // exemplo
printf(“H(%d) = %lld\n”, N, hiperfatorial(N));
return 0;
}
int N = 5; // exemplo
printf(“H(%d) = %lld\n”, N, hiperfatorial(N));
return 0;
}