Ir ao conteúdo

Posts recomendados

Postado

fiz um programa para inverter a ordem dos valores escritos em um vetor porém gostaria de saber como fazer usando recursividade alguém pode ajudar

 

#include <stdio.h>
void inverte_vetor(int v[], int n) {
  int i, j, tmp;
  i = 0;
  j = n-1;

  while (i < j) {
    tmp = v[i];
    v[i] = v[j];
    v[j] = tmp;

    i++;
    j--;

  }
}




int main(void) {
  int v[]={1,2,3,4,5,6};
  int n = 6, i;

  inverte_vetor(v, n);


  for (i = 0; i < n; i++)
    printf("%d ", v[i]);

  printf("\n");

  return(0);

}

 

Postado

Acredito que isso resolva seu problema:

#include <stdio.h>

/**
 * Função para inverter vetor.
 *
 * @param vetor         Vetor que será invertido.
 * @param posicaoInicio Primeira posição do vetor.
 * @param posicaoFim    Última posição do vetor.
 */
void inverteVetor(int vetor[], int posicaoInicio, int posicaoFim) {
    int temp = vetor[posicaoInicio];
    vetor[posicaoInicio] = vetor[posicaoFim];
    vetor[posicaoFim] = temp;

    if (posicaoInicio < posicaoFim) {
        inverteVetor(vetor, ++posicaoInicio, --posicaoFim);
    }
}

int main(){
    int vetor[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    inverteVetor(vetor, 0, 9);

    printf("Vetor invertido: \n");
    for(int i = 0; i < 10; ++i){
        printf("%d ", vetor[i]);
    }

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

 

  • Curtir 2
Postado

Observe @AdrianoSiqueira que, seja:

a < b

0    9 = Ok

...

4    5 = Ok

5    4 = Err, porém o problema é que já terá efeito a troca, ou melhor destroca.

É um erro bem fácil de corrigir basta inverte o procedimento de interrupção de recursividade.

  • Curtir 2
Postado

@AnsiC, você tem razão, foi um erro de lógica. É o que acontece quando não se debuga o código... 

#include <stdio.h>

/**
 * Função para inverter vetor.
 *
 * @param vetor         Vetor que será invertido.
 * @param posicaoInicio Primeira posição do vetor.
 * @param posicaoFim    Última posição do vetor.
 */
void inverteVetor(int vetor[], int posicaoInicio, int posicaoFim) {
    if (posicaoInicio < posicaoFim) {
        int temp = vetor[posicaoInicio];
        vetor[posicaoInicio] = vetor[posicaoFim];
        vetor[posicaoFim] = temp;

        inverteVetor(vetor, ++posicaoInicio, --posicaoFim);
    }
}

int main(){
    int vetor[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int elementos = (int) (sizeof(vetor) / sizeof(vetor[0]));

    inverteVetor(vetor, 0, (elementos - 1));

    printf("Vetor invertido: \n");
    for(int i = 0; i < elementos; ++i){
        printf("%d ", vetor[i]);
    }

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

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!