SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Dunadan en Martes 28 de Junio de 2005, 22:59

Título: Pasar Un Vector Como Argumento De Funcion
Publicado por: Dunadan en Martes 28 de Junio de 2005, 22:59
Buenas, concurro a esta comunidad para aclarar mis dudas.  HAce poco encontre uno ejercicios de recursividad bastante buenos, y como la vi muy por encima me puse a practicarlos.  En uno tenía que buscar un elemento en un vector de manera recursiva, con una funcion obviamente.  Pero cuando llamo a la funcion se me cuelga el compilador, diciendome que efectuo una operacion no permitida.  Aca está el código:

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int BuscarN(int *a,int);
  6.  
  7. main()
  8. {
  9.   int iVector[10];
  10.     int iNumero=0,iPosicion=0;
  11.   register int i;
  12.  
  13.   for(i=0;i<10;i++)
  14.     iVector[i]=rand() % 100;
  15.  
  16.   for(i=0;i<10;i++)
  17.     printf("%d\t",iVector[i]);
  18.  
  19.   printf("Ingrese un numero, se buscara recursivamente en un vector\n");
  20.  
  21.   scanf("%d",&iNumero);
  22.  
  23.   iPosicion=BuscarN(iVector,iNumero); /* acá se cuelga */
  24.  
  25.   if (iPosicion)
  26.   {
  27.     printf("\nNumero %d encontrado en posicion %d",iNumero,iPosicion);
  28.   }
  29.   else
  30.   {
  31.     printf("\nNumero %d no encontrado",iNumero);
  32.   }
  33. }
  34.  
  35. int BuscarN(int *a,int x)
  36. {
  37.   int i=0,r=0;
  38.  
  39.   if(i<10)
  40.   {
  41.     if(a[i] != x)
  42.     {
  43.       i++;
  44.       BuscarN(a,x);
  45.     }
  46.     else
  47.     {
  48.       return i;
  49.     }
  50.   }
  51. return r;
  52. }
  53.  

Tal vez sea un error de adentro de la función, pero la verdad no lo encuentro, y error de sintaxis no creo que sea ya que ni el borland ni el dev-c++ me tiraron error en la compilación.  Si aparte pueden corregir la función o cualquier otra sugerencia es bienvenida  ;) .

Saludos
Título: Re: Pasar Un Vector Como Argumento De Funcion
Publicado por: pitukilloloco en Miércoles 29 de Junio de 2005, 00:12
Hay varios errores en la función recursiva. El principal es que nunca hay una terminación de la recursividad y esta termina hasta que se derborda la pila en donde se depositan los datos cada vez que se llama recursivamente esta función. Otro error es que si la función BuscarN regresa un entero entonces cada vez que se llama recursivamente a esta función debe de llamarse con un return y no solamente invocando a la función como si esta no regresara valor alguno. Otra observación que se puede hacer a este ejemplo es que es muy artificial. Cuando se enseña la recursividad se ponen ejemplos que por su definición son recursivos, como los árboles binarios, el cálculo del factorial, el cálculo del máximo cómun divisor entre dos enteros o el ejemplo de las torres de Hanoi, pero en este caso con una simple iteración secuencial del vector desde el inicio hasta el final se puede determinar si hay un número en él y no es necesario la recursividad.
Título: Re: Pasar Un Vector Como Argumento De Funcion
Publicado por: Dunadan en Miércoles 29 de Junio de 2005, 15:25
Gracias por la ayuda y la corrección de errores, me funcionó haciendo a la variable i en Static, y poniendole el return al BuscarN dentro de la función.  La verdad que este ejercicio es muy "artificial", en el momento que lo leí, lo primero que se me ocurrió fue la versión iterativa, sólo lo hice para practicar.

Saludos.