Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fo_11

Duvida funcao recorsiva

Mensagens Recomendadas

fo_11

Tenh de calcular o maximo de um array atraves de uma função recursiva que possui o seguinte protótipo:int Maximo(int *v, int tam);

Estou com alguma dificuldade alguem me pode dar umas luzes?

Aqui está o código que já está escrito mas não faz o que pretendo repete sempre o segundo elemento do array:

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

int Max(int*,int);

int main()
{
    int v[5],tam=5,i;
    for(i=0;i<tam;i++)
     {printf("Insira numero:");
      scanf("%d",&v[i]);
     }
    printf("Maximo==>%d\n",Max(v,tam));
    system("pause");
}

int Max(int *v,int dim)
{
    int x;
    
    if(dim>1)
      x=Max(v++,--dim);
      
    if(x>*v)
     return x;
    else
     return *v;
}
    

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Strabush

Na main() é suposto ser assim:

Max(&v, tam);

Pois na função recebes um apontador.

Btw, o programa corre? Onde está o problema, caso saibas?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Mas v é um array logo tambem é um apontador... Por isso quando coloco v como parametro ele irá passar o seu endereço...

EDIT:Sim o programa corre mas não faz o que deveria fazer que era devolver o maior do array ao  invés disso retorna sempre o segundo elemente se este for maior que o primeiro

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

A função que determina o máximo está mal feita.

Primeiro testas se o elemento actual é maior que o max actual, depois é que verificas se atingiste o fim do array.

Algo como isto:

if(*v > *max) *max = *v;
if(v == &dim) return;
max(++v,max);

No meu caso max é um ponteiro para ser mais fácil de perceber. Não testei mas podes fazê-lo tu.

dim: Ponteiro que contém o endereço da última posição do array.

max: Ponteiro vai contêr o máximo no final.

v: ponteiro que percorre o array.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DVD

O teu problema é que estás a avançar com o ponteiro e tas a decrementar o tamanho, isso não percorre o array todo.

A maneira mais facil de fazer algoritmos recursivos é simplesmente descrever aquilo que farias se tivesses a pensar em resolver eu neste caso fazia:

- É o ultimo elemento? Sim retorno

- guardar este elemento para comparacao

- Calcular o maior com o resto do array

int max(int * v, int size)
{
if(size == 1) return v[0];

int maxtmp = max(v,size--);

return maxtmp > v[size] ? maxtmp : v[size];
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

O teu problema é que estás a avançar com o ponteiro e tas a decrementar o tamanho, isso não percorre o array todo.

@DVD, estavas a referir-te ao meu código? Acho que o meu está a funcionar.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.