Jump to content

Duvida funcao recorsiva


fo_11
 Share

Recommended Posts

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;
}
    
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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