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 N, escrito H(n), é definido por
H(n)=prodk=1^n k^k=1^1 * 2^2 * 3^3 ldots(n-1)^n-1 * n^n

Passo 1

O enunciado pede uma função recursiva que calcule o hiperfatorial de um inteiro positivo N, definido por
H(n)=prodk=1^n k^k=1^1times2^2times3^3timescdotstimes n^n
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
H(1)=1^1=1,
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
H(n)=H(n-1)times n^n
Ou seja, a cada chamada recursiva reduzimos n em 1 e multiplicamos o resultado por n^n.

Passo 4

Agora codificamos em C (ou pseudocódigo bem próximo) usando um laço interno para calcular n^n como inteiro e depois a chamada recursiva para H(n-1).

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;
}
int main() {
int N = 5; // exemplo
printf(“H(%d) = %lld\n”, N, hiperfatorial(N));
return 0;
}

Exercícios relacionados