elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Busqueda recursiva
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Busqueda recursiva  (Leído 8,896 veces)
s3tH

Desconectado Desconectado

Mensajes: 55



Ver Perfil
Busqueda recursiva
« 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);
                               }             
             
             
                 

}


En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Busqueda recursiva
« Respuesta #1 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:
Código:
scanf("%d",&vector[i]);

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

EDITADO: gracias exel
Código:
#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


« Última modificación: 6 Mayo 2012, 02:44 am por david_BS » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Busqueda recursiva
« Respuesta #2 en: 5 Mayo 2012, 21:22 pm »

Hola! si el prototipo de tu funcion no es obligatoria y la podes cambiar:
Código
  1. int buscar(int vec[], int tam, int max);
  2.  
  3. int main()
  4. {
  5. .......................
  6.  
  7.            max=vector[0]; // supongo q max es el primer elemento del array
  8.  
  9.            resultado = buscar(vector, tam, max);
  10.  
  11.            printf("el numero mayor es: %d", resultado);
  12.  
  13.            getch();
  14. }
  15.  
  16.  
  17. int buscar(int v[], int tam, int max)
  18. {  
  19.    if(tam==1)
  20.              return max;
  21.  
  22.       if(max<v[tam-1])
  23.              max=v[tam-1];      
  24.         return buscar(v,tam-1,max);        
  25.  
  26. }

Saludos
En línea

Ahorrate una pregunta, lee el man
raul_samp

Desconectado Desconectado

Mensajes: 36



Ver Perfil
Re: Busqueda recursiva
« Respuesta #3 en: 5 Mayo 2012, 21:52 pm »

Si vas a programar en C/C++ aprovéchalo xD
Código
  1. int max(int a, int b){
  2. return (a < b)? b : a;
  3. }
  4.  
  5. // Pre-condicion: tam > 0
  6. int buscar(int* v, int tam)
  7. {
  8.    if(tam == 1)
  9. return v[0];
  10.  
  11.    return max(v[0], buscar(++v, --tam));
  12. }
  13.  
En línea

Yeah Mr. White, yes science!!
s3tH

Desconectado Desconectado

Mensajes: 55



Ver Perfil
Re: Busqueda recursiva
« Respuesta #4 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);         
 
}
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Busqueda recursiva
« Respuesta #5 en: 6 Mayo 2012, 01:54 am »

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?
Código:
scanf("%d",&vector);

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

Código:
scanf("%d",&vector);
vector++;

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

En línea

exel

Desconectado Desconectado

Mensajes: 50



Ver Perfil
Re: Busqueda recursiva
« Respuesta #6 en: 6 Mayo 2012, 02:34 am »

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. int buscar(int vec[], int tam);
  6.  
  7. int main()
  8. {
  9.    int vector[100]={0},tam, i, resultado;
  10.  
  11.    printf("Ingrese el tamaño del vector: \n");
  12.    scanf("%d", &tam);
  13.  
  14.    for(i=0;i<tam;i++)
  15.    {
  16.         printf("Ingrese elemento [%d]: ",i);
  17.         scanf("%d",&vector[i]);
  18.    }
  19.  
  20.  
  21.    resultado = buscar(vector, tam);
  22.  
  23.    printf("el numero mayor es: %d\n", resultado);
  24.  
  25.    system("pause");
  26. return 0;
  27. }
  28.  
  29. int buscar(int v[], int tam)
  30. {
  31.    int max=0;
  32. int c=tam;
  33.  
  34.    if(tam==0){
  35.  
  36. return -1;
  37. }
  38.    else
  39. {
  40. if((c-1)>=1){
  41.  
  42. if(v[c-1]>max){
  43.  
  44. max=v[c-1];
  45.  
  46. c--;
  47.  
  48. if(v[c-1]<max)
  49. v[c-1]=max;
  50. }
  51.  
  52.  
  53. if(c>0)
  54. return buscar(v,c);
  55. else
  56. return max;
  57. }
  58.  
  59. return v[0];
  60. }
  61. }
  62.  

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.
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Busqueda recursiva
« Respuesta #7 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

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
De forma recursiva « 1 2 3 »
Ejercicios
:ohk<any> 21 19,247 Último mensaje 5 Septiembre 2008, 18:54 pm
por carlitos.dll
Función recursiva de búsqueda.
Programación C/C++
APOKLIPTICO 1 2,841 Último mensaje 4 Junio 2010, 21:51 pm
por [D4N93R]
[C] Búsqueda binaria recursiva
Programación C/C++
BatchianoISpyxolo 3 19,455 Último mensaje 29 Octubre 2012, 23:08 pm
por flony
Me pueden ayudar a hacer una Búsqueda Binaria Recursiva Dinamica
Programación C/C++
gibranini 4 3,964 Último mensaje 8 Julio 2014, 19:20 pm
por gibranini
Cömo detener búsqueda recursiva de un elemento
Programación C/C++
andie13 3 3,165 Último mensaje 24 Septiembre 2017, 04:07 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines