OneCompiler

Lista_1

#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);
}