aula 163

Como inverter a posição dos elementos de um vetor com recursão?

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

Deixe um comentário

1 × um =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.