Na aula de hoje aprenderemos como inverter a posição dos elementos de um vetor com recursão. Na aula 113 do nosso curso de programação C nós aprendemos como inverter a ordem dos elementos de um vetor de forma iterativa, com uma estrutura de repetição. Nesta aula nós vamos aprender como trocar a ordem dos elementos de um vetor com um procedimento recursivo.
Fazer essa inversão com recursão é extremamente simples. A ideia é utilizar dois índices, um para a primeira posição do vetor e outro para a última posição do vetor. Após a troca, ao fazer a chamada recursiva, incrementamos o índice que aponta para o início e decrementamos o índice que aponta para o fim.
Perceba que estamos caminhando em direção ao centro do vetor. Este é nosso ponto de parada, nosso caso base.
- Se o índice que aponta para o início for menor que o índice que aponta para o fim, então fazemos a troca e a chamada recursiva;
- Se os dois índices forem iguais significa que estamos exatamente no meio do vetor e o vetor possui tamanho ímpar, então não é necessário fazer nenhuma troca, o vetor já está invertido.
- O mesmo acontece se o índice que aponta para o início for maior que o índice que aponta para o fim. Significa que nosso vetor tem tamanho par e já está invertido.
Código em C para inverter a posição dos elementos de um vetor com recursão
#include <stdio.h>
#include <stdlib.h>
/*
Aula 163: Dado um vetor de inteiros e o seu número de elementos, inverta a posição dos seus elementos usando recursão.
Escrito por Wagner Gaspar
Março de 2021
*/
void trocar(int v[], int ini, int fim){
int aux;
if(ini < fim){
aux = v[ini];
v[ini] = v[fim];
v[fim] = aux;
trocar(v, ini + 1, fim - 1);
}
}
void imprimir(int v[], int tam){
if(tam == 1)
printf("%d, ", v[tam - 1]);
else{
imprimir(v, tam - 1);
printf("%d, ", v[tam - 1]);
}
}
int main () {
int vet[10] = {11,258,13,445,58,67,700,8,9,10};
imprimir(vet, 10);
trocar(vet, 0, 9); // vetor, índice inicial e índice final
printf("\n");
imprimir(vet, 10);
return 0;
}
