Crie um programa que contenha uma função recursiva para encontrar o menor elemento em um vetor.
Passo 1
Resumo do enunciado: precisamos criar um programa que receba um vetor de inteiros e retorne o menor elemento usando uma função recursiva. O conteúdo principal é recursão aplicada à procura de um valor mínimo em um conjunto.
Passo 2
Entender o caso base e o caso recursivo: o caso base ocorre quando o tamanho do vetor é 1, pois aí sabemos que esse único elemento é o mínimo. O caso recursivo deve dividir o problema reduzindo o tamanho do vetor em 1 e comparando o resultado dessa chamada com o elemento excluído.
Passo 3
Definir a lógica da função recursiva findMin(arr, n): 1) se n == 1, retornar arr[0]; 2) caso contrário, chamar findMin(arr, n-1) para obter o mínimo dos primeiros n-1 elementos; 3) comparar esse resultado com arr[n-1] e retornar o menor dos dois.
Passo 4
Implementar em C o protótipo e a função findMin:
int findMin(int arr[], int n)
{
if (n == 1)
return arr[0];
int minSub = findMin(arr, n - 1);
return (minSub < arr[n - 1]) ? minSub : arr[n - 1];
}
int findMin(int arr[], int n)
{
if (n == 1)
return arr[0];
int minSub = findMin(arr, n - 1);
return (minSub < arr[n - 1]) ? minSub : arr[n - 1];
}
Passo 5
Criar a função main: ler o tamanho do vetor, ler seus elementos em um laço, chamar findMin passando o vetor e seu tamanho, e imprimir o resultado.
Passo 6
Exemplo de teste mental: para o vetor {7, 3, 9, 2, 5}, a chamada findMin(arr,5) vai dividir até n=1 retornando 7, depois comparações sucessivas descobrem que 2 é o menor, retornando 2.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int findMin(int arr[], int n) {
// Caso base: um único elemento
if (n == 1)
return arr[0];
// Chamada recursiva para o subvetor de tamanho n-1
int minSub = findMin(arr, n - 1);
// Retorna o menor entre o último elemento e o mínimo do subvetor
return (minSub < arr[n - 1]) ? minSub : arr[n - 1];
}
// Caso base: um único elemento
if (n == 1)
return arr[0];
// Chamada recursiva para o subvetor de tamanho n-1
int minSub = findMin(arr, n - 1);
// Retorna o menor entre o último elemento e o mínimo do subvetor
return (minSub < arr[n - 1]) ? minSub : arr[n - 1];
}
int main() {
int n;
printf(“Digite o tamanho do vetor: “);
scanf(”%d”, &n);
int n;
printf(“Digite o tamanho do vetor: “);
scanf(”%d”, &n);
int *arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Erro de alocação de memória.\n");
return 1;
}
for (int i = 0; i < n; i++) {
printf("Elemento %d: ", i + 1);
scanf("%d", &arr[i]);
}
int minimo = findMin(arr, n);
printf("\nO menor elemento do vetor é: %d\n", minimo);
free(arr);
return 0;
}