Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: s3tH en 5 Mayo 2012, 20:13 PM

Título: Busqueda recursiva
Publicado por: s3tH en 5 Mayo 2012, 20:13 PM
Que tal, estoy elaborando un programa en c, que de forma recursiva me de el numero mayor de un vector, este es mi codigo, la verdad no logro que lo haga solo me arroja una posicion de memoria, espero contar con su ayuda, gracias:

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


int buscar(int vec[], int tam);

int main()
{
    int vector[100],tam, i, resultado;
   
    printf("Ingrese el tamaño del vector:");
    scanf("%d", &tam);
   
    for(i=0;i<tam;i++)
    {
            printf("Ingrese elemento [%d]:",i);
            scanf("%d",&vector);
            }
           
         
            resultado = buscar(vector, tam);
   
            printf("el numero mayor es: %d", resultado);
           
            getch();
}


int buscar(int v[], int tam)
{
    int aux;
   
    if(tam==0)
              return v[0];
               
             
              else{
              aux=buscar(v, tam-1);
              if(v[tam]>aux)
                               return v[tam];
                               else
                               return buscar(v,tam-1);
                               }             
             
             
                 

}
Título: Re: Busqueda recursiva
Publicado por: david_BS en 5 Mayo 2012, 21:00 PM
tu código tiene un error en la carga del vector, es que no le pasás el índice..
debe estar de esta manera:

scanf("%d",&vector[i]);


y me tomé la libertad de hacer tu problema ya que parece que lo has intentado.

EDITADO: gracias exel

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


int buscar(int vec[], int tam);

int main()
{
   int vector[100]={0},tam, i, resultado;
   
   printf("Ingrese el tamaño del vector: \n");
   scanf("%d", &tam);
   
   for(i=0;i<tam;i++)
   {
        printf("Ingrese elemento [%d]: ",i);
        scanf("%d",&vector[i]);
   }
           
         
   resultado = buscar(vector, tam);
   
   printf("el numero mayor es: %d\n", resultado);
           
   system("pause");
return 0;
}

int buscar(int v[], int tam)
{
   int max=0;
int c=tam;

   if(tam==0){

return -1;
}
   else
{
if((c-1)>=1){

if(v[c-1]>max){

max=v[c-1];

c--;

if(v[c-1]<max)
v[c-1]=max;
}
                        else
                              c--;

if(c>0)
return buscar(v,c);
else
return -1;
}

return v[0];
}
}


aparte había estado con ese tema hasta hace poco ;-D
http://foro.elhacker.net/programacion_cc/recursividad-t359491.0.html
Título: Re: Busqueda recursiva
Publicado por: durasno en 5 Mayo 2012, 21:22 PM
Hola! si el prototipo de tu funcion no es obligatoria y la podes cambiar:
int buscar(int vec[], int tam, int max);

int main()
{
.......................

            max=vector[0]; // supongo q max es el primer elemento del array
           
            resultado = buscar(vector, tam, max);
   
            printf("el numero mayor es: %d", resultado);
           
            getch();
}


int buscar(int v[], int tam, int max)
{   
    if(tam==1)
              return max;
 
       if(max<v[tam-1])
              max=v[tam-1];       
         return buscar(v,tam-1,max);         

}


Saludos
Título: Re: Busqueda recursiva
Publicado por: raul_samp en 5 Mayo 2012, 21:52 PM
Si vas a programar en C/C++ aprovéchalo xD

int max(int a, int b){
return (a < b)? b : a;
}

// Pre-condicion: tam > 0
int buscar(int* v, int tam)
{
    if(tam == 1)
return v[0];
   
    return max(v[0], buscar(++v, --tam));
}
Título: Re: Busqueda recursiva
Publicado por: s3tH en 5 Mayo 2012, 23:09 PM
muchas gracias por si ayuda, ya esta funcionando, saludos

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


int buscar(int vec[], int tam, int max);

int main()
{

int max, i, vector[100], tam, resultado;
         
   
    printf("Ingrese el tamaño del vector: \n");
    scanf("%d", &tam);
   
    for(i=0;i<tam;i++)
    {
         printf("Ingrese elemento [%d]: ",i);
         scanf("%d",&vector);
    }
         
         
            max=vector[0];

            resultado = buscar(vector, tam, max);

            printf("el numero mayor es: %d", resultado);

            getch();
}


int buscar(int v[], int tam, int max)
{   
    if(tam==1)
              return max;

       if(max<v[tam-1])
              max=v[tam-1];       
         return buscar(v,tam-1,max);         

}
Título: Re: Busqueda recursiva
Publicado por: david_BS en 6 Mayo 2012, 01:54 AM
Cita de: s3tH en  5 Mayo 2012, 23:09 PM
muchas gracias por si ayuda, ya esta funcionando, saludos

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


int buscar(int vec[], int tam, int max);

int main()
{

int max, i, vector[100], tam, resultado;
         
   
    printf("Ingrese el tamaño del vector: \n");
    scanf("%d", &tam);
   
    for(i=0;i<tam;i++)
    {
         printf("Ingrese elemento [%d]: ",i);
         scanf("%d",&vector);
    }
         
         
            max=vector[0];

            resultado = buscar(vector, tam, max);

            printf("el numero mayor es: %d", resultado);

            getch();
}


int buscar(int v[], int tam, int max)
{   
    if(tam==1)
              return max;

       if(max<v[tam-1])
              max=v[tam-1];       
         return buscar(v,tam-1,max);         

}

Amigo, por qué usás el scanf de esa forma?
scanf("%d",&vector);

es decir, puedes usarlo así pero sólo si incrementás el puntero "vector", algo como:


scanf("%d",&vector);
vector++;


de otra forma se usaría así:
scanf("%d",&vector[i]);

Título: Re: Busqueda recursiva
Publicado por: exel en 6 Mayo 2012, 02:34 AM
Cita de: david_BS en  5 Mayo 2012, 21:00 PM

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


int buscar(int vec[], int tam);

int main()
{
   int vector[100]={0},tam, i, resultado;
   
   printf("Ingrese el tamaño del vector: \n");
   scanf("%d", &tam);
   
   for(i=0;i<tam;i++)
   {
        printf("Ingrese elemento [%d]: ",i);
        scanf("%d",&vector[i]);
   }
           
         
   resultado = buscar(vector, tam);
   
   printf("el numero mayor es: %d\n", resultado);
           
   system("pause");
return 0;
}

int buscar(int v[], int tam)
{
   int max=0;
int c=tam;

   if(tam==0){

return -1;
}
   else
{
if((c-1)>=1){

if(v[c-1]>max){

max=v[c-1];

c--;

if(v[c-1]<max)
v[c-1]=max;
}


if(c>0)
return buscar(v,c);
else
return max;
}

return v[0];
}
}


Creo que tienes un error en tu forma de atacar el problema, observa detenidamente en la linea 42 y 53, ¿que pasaria si el ultimo elemento es un valor negativo?.

Quisas este equivocado, pero ya no quiero pensar :P.
Título: Re: Busqueda recursiva
Publicado por: david_BS en 6 Mayo 2012, 02:46 AM
es cierto, es que hice esto sin pensarlo demasiado y ni había considerado el caso de números negativos pero la solución es solamente saltearse ese número.

me parece que está arreglado XD