Jump to content

Recursividade


igorsouza2012
 Share

Recommended Posts

Peço desculpas por novamente estar aqui pedindo ajuda de vocês, mas é que recursividade não esta entrando na minha cabeça de jeito nenhum. :wallbash:

eu consegui fazer um programa com recursividade de media.

No entanto nao to conseguindo fazer uma para ler os numeros de um vetor e dizer se sao todos pares ou não.

(Tenho que retornar 1 caso todos sejam pares e 0 caso contrario.)

Nao to conseguindo ir a lugar nenhum. Sera que alguem podeme ajudar?

  ?

Link to comment
Share on other sites

  • Replies 41
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Atenção, eu não te vou dar um código. Vou tentar explicar.

Basicamente tens de criar uma função que se chame a ela própria e que receba um ponteiro (que vai percorrer o array) e cada vez que se chama incrementas esse ponteiro (aritmética de ponteiros) numa unidade para ir para a próxima posição no array. Tens também de verificar se o ponteiro está no final do array, se estiver significa que todos são pares porque também tens uma condição que verifica se o elemento actual é ímpar, se for retornas -1 ou algo assim parecido.

here since 2009

Link to comment
Share on other sites

Eu cheguei nisso aqui...

e nao to achando o erro...

int par (int vet[5],int pos)
{     
      int pares=0;
      if((pos==5)&&(vet[5]%2!=0))
      {
            return 1;
      }
      else
      {
          pares=par(vet,pos+1);
          {
             return 0;
             }
      }                
         return pares;
}
Link to comment
Share on other sites

Realmente eu nao entendi cara...

Tem como você ajeitar o meu codigo ou me manda um pronto pra eu dar uma olhada como realmente é e refazer esse antes de continuar fazendo os outros???

ta aqui o meu codigo completo.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int par (int vet[5],int pos)
{     
      int pares=0;
      if (vet[5]%2!=0)
      {
            return -1;
      }
      if (pos==5)
      {
            return 1;
            }
            
      else
      {
          pares=par(vet,pos+1);
      }                
         return pares;
}
      
      
      
int main(void)
{   int vet[5],i,p;
    for (i=0;i<5;i++)
    {
        printf("Digite o valor na possicao %i\n",i);
        scanf("%i",&vet[i]);
    }
    p=(par,0);
    printf("%i",p);
    if (p==0)
    {
               printf("Todos os numeros sao pares!\n");
    }
    else
    {
               printf("Nem todos os numeros sao pares!\n");
    }
    system("PAUSE");
return 0;
}
Link to comment
Share on other sites

Desculpa, eu não li a parte em que disseste que se não fossem todos pares retornava 0. Considera como se fosse 0 aquele -1.

O even seria a chamada à função que receberia, respectivamente, "um array" (os outros percebem as aspas), o tamanho desse array e a variável que percorre o array. A variável que percorre o array tem de ser aumentada a cada chamada.

here since 2009

Link to comment
Share on other sites

Eu acho que vocês estão aí a fazer coisas a mais, vejo demasiados ifs para uma coisa que deve resumir-se a 2 casos:

- o caso de paragem

- o caso em que se constrói uma parte do resultado e se invoca a função novamente, mas com novos parâmetros.

Penso que o objectivo aqui é utilizar a operação && para realizar uma operação de booleanos, os quais resultam da avaliação da paridade de cada elemento do vector. Para tal, basta:

- no caso de paragem, testar se já se atingiu o fim do vector. Nesse caso, deve-se devolver o valor 1 (porque se trata de um &&. Caso não compreendas, sugiro que faças uma tabela de verdade para perceberes).

- no caso recursivo, testa-se se o elemento em questão é par e invoca-se a função passando o mesmo vector, e no 2º parâmetro, passa-se então o inteiro que serve para jogar com o tamanho do array/índexagem, mas alterado em 1 unidade.

Link to comment
Share on other sites

@igorsouza2012, tens de ter calma.

Tu ainda não percebeste o meu exemplo? A mim parece-me é que ainda não percebeste outras coisas, com o meu exemplo já conseguias criar a função porque supostamente sabias criar o cabeçalho da mesma.

here since 2009

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.