#include <stdio.h>
#include <math.h>
#define restoPositivo(a, b) (((a) % (b) + (b)) % (b))
// 1 - O cálculo de n! utilizando recursividade (exemplo teste 5!)
int fatorial(int n)
{
if (n == 1)
return 1;
return fatorial(n - 1) * n;
}
// 2 - a sequência de Fibonacci
int fibonacci(int n)
{
if (n == 1 || n == 2)
return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// 3 A impressão recursiva dos números naturais de 1 a n (exemplo teste 1 a 10)
void imprime_n(int n)
{
if (n == 0)
return;
imprime_n(n - 1);
printf("%d ", n);
}
// um método recursivo que receba como entrada um número inteiro positivo n e retorne 1 + 2 + 3 + 4 + … + n
int soma_n(int n)
{
if (n == 1)
return 1;
return soma_n(n - 1) + n;
}
// Calcular o mdc(a,b)
int mdc(int a, int b)
{
int resto = a % b;
if (resto == 0)
return b;
mdc(b, resto);
}
// Tabela Adição
void imprimeTabelaAdicao(int modulo)
{
printf("Tabela de Adicao Modular Z_%d\n", modulo);
for (int linha = 0; linha < modulo; linha++)
{
for (int coluna = 0; coluna < modulo; coluna++)
printf("%2d ", restoPositivo(linha + coluna, modulo));
printf("\n");
}
}
// Tabela Multiplicação
void imprimeTabelaMultiplicacao(int modulo)
{
printf("Tabela de Multiplicacao Modular Z_%d\n", modulo);
for (int linha = 0; linha < modulo; linha++)
{
for (int coluna = 0; coluna < modulo; coluna++)
printf("%2d ", restoPositivo(linha * coluna, modulo));
printf("\n");
}
}
int main()
{
// Print da Função fatorial
//Caso retorne 0, a entrada gera um numero muito grande resultando em um overflow
printf("Fatorial -> %d\n", fatorial(5));
// Print da Função de Fibonacci
printf("Fibonacci -> %d\n", fibonacci(5));
// Print de 1 até n
imprime_n(10);
printf("\n");
// Print da soma recursiva
printf("Soma Recursiva -> %d\n", soma_n(5));
// 5 - Algoritmo de Euclides para o cálculo do MDC
printf("Mdc -> %d\n", mdc(72, 34));
// 6 - Print do mmc(a,b) a partir do mdc(a,b)
printf("Mmc -> %d\n", (72 * 34) / mdc(72, 34));
printf("resto positivo -> %d\n", restoPositivo(-37, 5));
// 7 - Tabela Adição
imprimeTabelaAdicao(20);
// 8 - Tabela multiplicação
imprimeTabelaMultiplicacao(20);
}