Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MichelleAraujo

[Resolvido] Função recursiva maior elemento de vetor

Recommended Posts

Olá pessoal, tudo bem? Sou nova quanto a linguagem C, e tem algumas coisas que ainda tenho dificuldade.

Tô com um exercicio de fazer uma função recursiva para achar o maior elemento de um vetor. Fiz da maneira abaixo, só que o problema q ele tá dizendo que o maior é 0, ou seja, a função parece que não está lendo o vetor. Alguem pode verificar qual o erro? Obrigada :thumbsup:/>

 

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

int ArmazenaRelacao(float *a)
{
int i,n;
puts("Digite a quantidade de elementos da relacao:");
scanf("%i",&n);
a=malloc(n*sizeof(int));
puts("Digite os elementos da relacao:");
for (i=0;i<n;i++) {
	scanf("%f",&a[i]);
}
free(a);
return (n);
}

float maior(float *c, int s)
{
if (s==1) return (c[0]);
else {
	int x;
	x=maior(c, s-1);
	printf("%i\n",x);
	if (x>c[s-1]) return (x);
	else return (c[s-1]);
}
}

int main()
{
int j;
float *vetor;
j=ArmazenaRelacao(vetor);;
printf("Maior = %.2f",maior(vetor,j));
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ajudou bastante. Agora fiz as mudanças de acordo com o link e quando vou executar, depois de inserir a quantidade de elementos do vetor e os seus elementos, dá erro de segmentation fault (core dumped)..

Novo código:

 

//0:Maior elemento de um vetor
#include <stdio.h>
#include <stdlib.h>

int ArmazenaRelacao(float **v)
{
       int i,n;
       puts("Digite a quantidade de elementos da relacao:");
       scanf("%i",&n);
       *v=malloc(n*sizeof(int));
       puts("Digite os elementos da relacao:");
       for (i=0;i<n;i++) {
               scanf("%f",&*v[i]);
       }
       free(v);
       return (n);
}

float maior(float *v, int s)
{
       if (s==1) return (v[0]);
       else {
               int x;
               x=maior(v, s-1);
               //printf("%i\n",x);
               if (x>v[s-1]) return (x);
               else return (v[s-1]);
       }
}

int main()
{
       int j;
       float *vetor;
       j=ArmazenaRelacao(&vetor);;
       printf("Maior = %.2f",maior(vetor,j));
       return 0;
}

 

O que pode estar errado dessa vez?

 

EDIT

 

Fiz umas mudanças no codigo e agora está tudo beleza:

 

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

float* aloca(int n)
{
    float *aux;
    aux = (float* ) malloc(n * sizeof(float));
    if(aux == NULL)
    {
         printf("Memoria insuficiente!\n");
         exit(1);
    }
    return aux;
}

float maior(float *v, int s)
{
       if (s==1) return (v[0]);
       else {
               int x;
               x=maior(v, s-1);
               if (x>v[s-1]) return (x);
               else return (v[s-1]);
       }
}

int main()
{
       int j,i;
       float *vetor;
	puts("Digite a quantidade de elementos da relacao:");
	scanf("%i",&j);
	vetor=aloca(j);
	puts("Digite os elementos da relacao:");
       for (i=0;i<j;i++) {
               scanf("%f",&vetor[i]);
       }
       printf("Maior = %.2f",maior(vetor,j));
       return 0;
}

 

Mais um problema resolvido :lol:/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cuidado com a indentação. Ela serve como indicativo visual da parte do controle de fluxo a que uma linha pertence:

 

int max(int *input, size_t left)
{
   if (left == 1)
return *input;

   int max_rest = max(input + 1, left - 1);

   return max_rest > *input?
       max_rest :
*input;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.