Você está na página 1de 4

Universidade do Estado do Pará – UEPA

Centro de Ciências Exatas e Naturais – CCNT


Curso de Superior Bacharelado em Engenharia de Software
Estrutura de Dados, Pesquisa e Ordenação
Atividade teórica 5: recursividade
Discente: Geciane Oliveira Vieira

1) Usando recursividade, calcule a soma de todos os valores de um vetor (2,0 pontos).

#include <stdio.h>
// Função recursiva para calcular a soma dos elementos de um vetor.
int somarVetor(int vetor[], int tamanho) {
if (tamanho == 0) {
return 0;
} else {
// Somar o último elemento do vetor com o resultado da chamada recursiva.
return vetor[tamanho - 1] + somarVetor(vetor, tamanho - 1);
}
}
int main() {
int vetor[] = {1, 2, 3, 4, 5};
int tamanho = sizeof(vetor) / sizeof(vetor[0]);
// Chamar a função somarVetor para calcular a soma dos elementos.
int soma = somarVetor(vetor, tamanho);
printf("A soma dos elementos do vetor é: %d\n", soma);

return 0;
}

2) Implemente um algoritmo em C, utilizando o conceito de recursividade, que seja capaz


de exibir os elementos de um vetor v[0..n-1] ao contrário (2,0 pontos).

#include <stdio.h>
// Função recursiva para exibir os elementos de um vetor ao contrário.
void exibirVetorAoContrario(int vetor[], int inicio, int tamanho) {
if (inicio < tamanho) {
// Chamar a função recursivamente para exibir o próximo elemento.
exibirVetorAoContrario(vetor, inicio + 1, tamanho);
// Exibir o elemento atual
printf("%d ", vetor[inicio]);
}
}
int main() {
int vetor[] = {5, 4, 3, 2, 1};
int tamanho = sizeof(vetor) / sizeof(vetor[0]);
printf("Elementos do vetor ao contrário: ");
exibirVetorAoContrario(vetor, 0, tamanho);
printf("\n");

return 0;
}

3) Também usando o conceito de recursividade, crie um algoritmo em C que seja capaz de


converter um número da sua forma decimal para a forma binária (2,0 pontos).

#include <stdio.h>
// Função recursiva para converter decimal em binário.
void decimalToBinary(int decimal) {
// Caso base: se o decimal for zero, a recursão para
if (decimal == 0) {
return;
}
// Chamada recursiva com a divisão do decimal por 2.
decimalToBinary(decimal / 2);
// Imprime o último dígito binário (resto da divisão por 2).
printf("%d", decimal % 2);
}

int main() {
int decimalNumber;

printf("Digite um número decimal: ");


scanf("%d", &decimalNumber);

printf("O número binário correspondente é: ");


decimalToBinary(decimalNumber);

printf("\n");
return 0;
}

4) A partir da utilização de funções recursivas, crie um algoritmo em C que seja capaz de


unir dois vetores (2,0 pontos).

#include <stdio.h>
// Função recursiva para unir dois vetores.
void mergeArrays(int arr1[], int size1, int arr2[], int size2, int result[], int index) {
// Caso base: quando ambos os vetores foram percorridos
if (index >= size1 + size2) {
return;
}
// Verifica se o índice atual pertence ao primeiro vetor.
if (index < size1) {
result[index] = arr1[index];
}
// Se não, pertence ao segundo vetor.
else {
result[index] = arr2[index - size1];
}
// Chama a função recursivamente para o próximo índice.
mergeArrays(arr1, size1, arr2, size2, result, index + 1);
}
int main() {

int size1, size2;

printf("Digite o tamanho do primeiro vetor: ");


scanf("%d", &size1);

printf("Digite o tamanho do segundo vetor: ");


scanf("%d", &size2);

int arr1[size1], arr2[size2];

printf("Digite os elementos do primeiro vetor:\n");


for (int i = 0; i < size1; i++) {
scanf("%d", &arr1[i]);
}

printf("Digite os elementos do segundo vetor:\n");


for (int i = 0; i < size2; i++) {
scanf("%d", &arr2[i]);
}

int mergedSize = size1 + size2;


int mergedArray[mergedSize];

// Inicia a função recursiva para unir os vetores.


mergeArrays(arr1, size1, arr2, size2, mergedArray, 0);

printf("O vetor unido é:\n");


for (int i = 0; i < mergedSize; i++) {
printf("%d ", mergedArray[i]);
}

printf("\n");

return 0;

5) Escreva uma função recursiva em C que receba um inteiro positivo n e devolva a soma dos
dígitos decimais de n. Por exemplo, ao receber 2638 sua função deve devolver 19 (2,0 pontos).

#include <stdio.h>

// Função recursiva para calcular a soma dos dígitos decimais.


int sumOfDigits(int n) {
// Caso base: se n for menor que 10, é um dígito único
if (n < 10) {
return n;
}

// Divide n por 10 para remover o último dígito e soma com o próximo.


return n % 10 + sumOfDigits(n / 10);
}

int main() {
int number;

printf("Digite um número inteiro positivo: ");


scanf("%d", &number);

int result = sumOfDigits(number);

printf("A soma dos dígitos de %d é %d\n", number, result);

return 0;
}

Você também pode gostar