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