RECURSION IN C - COUNT EVEN NUMBERS OF A VECTOR

Asked

Viewed 787 times

-1

#include <stdio.h>

#define N 6

int verificaPar (int v[], int n, int qtd, int indice); // protótipo

int main()
{
    int vetor[N] = {13, 6, 8, 3, 4, 9};    // vetor igual do exercicio
    int resultado ; // ja tentei inicializar como 0 para ver se nao tem lixo e n adiantou

    resultado = verificaPar(vetor, N, 0, 0); // verificando o retorno(quantidade)

    if(resultado > 0)
    {

        printf("Quantidade de numeros pares:   %d\n", resultado);
    }// printando a quantidade
    else
    {
        printf("Nao ha numeros pares\n");
    }
    return 0;

}

int verificaPar(int v[], int n, int qtd, int indice)
{

    if(v[indice]%2 == 0) //verificação pra ver se o numero daquela posicao é par.
    {
        qtd++;
    }
    if( v[indice] >= n-1)  // verifica se o indice chegou ao final do total de numeros do vetor.(n-1 pq a ultima posicao tem n-1 d indice)
    {
        verificaPar(v,n,qtd, indice+1);
    }

    else
    {
        return qtd; // se sim, devolve a quantidade acumulada de numeros pares.
    }


}

I DON’T KNOW WHAT COULD BE WRONG, BUT HE’S NOT TELLING IT RIGHT.

  • Under this condition: if( v[Indice] >= n-1) should not terminate and return the quantity?

  • True, I changed the lines. Thank you!

1 answer

0

This function does the job and is much simpler (besides making more sense with recursion), I believe:

int contaPar(int *v, int n)
{
    if (n == 0)
        return 0; // Lista vazia, nao tem numeros, muito menos pares!

    return contaPar(v + 1, n - 1) + 1 - v[0] % 2; // Soma 1 se o atual for par e chama a funcao pro vetor deslocado de uma posição
}

Where v is the vector and n is the number of its elements.

To a vector v, we can recursively define the number of pairs in it as the number of pairs in the vector from position 1 summed with k, where k is 1 if the first is even and 0 if not.

See that 1 - x % 2 satisfies "1 if x is even, 0 if no".

v + 1 is precisely the vector from position 1, and subtraction 1 in n for the next iteration because this vector has one less element.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.