SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: mojayu en Miércoles 9 de Enero de 2008, 13:08

Título: Programacion Recursiva
Publicado por: mojayu en Miércoles 9 de Enero de 2008, 13:08
A ver si me pueden ayudar. Necesito una funcion recursiva que haga lo siguiente.

Dado un vector de enteros, tiene que calcular y devolver por pantalla el vector resultante al sustituir cada elemento del vector por la suma de las demas componentes.

Ej: si v=[1,2,4,7] el resultado deberia de ser [13,12,10,7]

Espero respuestas. Muchas gracias

Si podeir responderme al uya134@hotmail.com

Edito para decir que no quiero que me hagan la tarea. Solo pido ayuda, no se por donde empezar
Título: Re: Programacion Recursiva
Publicado por: fORU- en Miércoles 9 de Enero de 2008, 17:08
mmm haber si entendi quieres algo si: si tienes dos vectores y del mimos tamaño osea v1=(2,2,2,2) y v2=(3,4,5,6) entonces el vResultante=(5,6,7,8) eso es lo que quieres que haga tu programa??


edito para decir que ya etendi  :P , mira encontre este pdf espero te sirva

http://elvex.ugr.es/decsai/java/pdf/7C-Ejemplos.pdf (http://elvex.ugr.es/decsai/java/pdf/7C-Ejemplos.pdf)

otra cosa mas, recursividad es cuando una funcion se llama asi misma, ejemplo se quiere que un numero introducido se reduzca hasta 1 utilizando recursividad.

int menos(int numero)
{ if(numero==1¦¦numero<2)
     return numero;
   else
      menos(numero-1);
}
Título: Re: Programacion Recursiva
Publicado por: mojayu en Miércoles 9 de Enero de 2008, 19:18
Se lo que es la recursividad y los ejemplos que me das ya los tengo hechos. Necesito ese caso en concreto y no es como dices si tengo el vector 1,2,3 tengo que devolverr 5,4,3 -> cada componente es la suma de las otras dos
Título: Re: Programacion Recursiva
Publicado por: Mollense en Miércoles 9 de Enero de 2008, 21:45
Cita de: "mojayu"
A ver si me pueden ayudar. Necesito una funcion recursiva que haga lo siguiente.

Dado un vector de enteros, tiene que calcular y devolver por pantalla el vector resultante al sustituir cada elemento del vector por la suma de las demas componentes.

Ej: si v=[1,2,4,7] el resultado deberia de ser [13,12,10,7]

Espero respuestas. Muchas gracias

Si podeir responderme al uya134@hotmail.com

Edito para decir que no quiero que me hagan la tarea. Solo pido ayuda, no se por donde empezar
Que tal mojayu?

Para mi, lo mas fácil en este caso es que calcules la suma de todos los elementos una sola vez, ej:
Código: Text
  1.  
  2. int suma=0;
  3. for(int i=0; i&#60;cantidadDeElementos;i++)suma+=v[i];
  4.  
después simplemente generás el resultado haciendo que cada valor sea igual a la suma menos el valor actual del vector original:
Código: Text
  1.  
  2. for(int i=0; i&#60;cantidadDeElementos;i++)resultado[i]=suma-v[i];
  3.  

Espero se entienda.

Un saludo :beer:

Pd: No lo probé, no tengo ningún compilador en esta máquina, pero la idea es esa.
Título: Re: Programacion Recursiva
Publicado por: mojayu en Jueves 10 de Enero de 2008, 00:13
Tambien se que asi funciona pero eso es iterativo y lo necesito recursivo. Mugas gracias de todas formas
Título: Re: Programacion Recursiva
Publicado por: diego.martinez en Jueves 10 de Enero de 2008, 09:36
lo mas facil es que en la funcion recursiva , le pases como parametros los punteros a los 2 arrays, y despues de operar incrementes la direccion en 1 en los 2 punteros.
La condicion de parada seria que alguno de ellos fuera NULL.
Título: Re: Programacion Recursiva
Publicado por: mojayu en Jueves 10 de Enero de 2008, 16:44
El problema que tenia era encontrar la recursion y creo q mas o menos lo he conseguido. Os lo intento explicar para que sepais lo q buscaba ;)

si por ejemplo tienes el vector [4,7,8,10] se trata de encontrar la solucion basandote en la solucion de un problema menor, que seria la solucion del vector [4,7,8], asi sucesivamente hasta llegar al vector con una componente [4] que es el caso tribial y devuelbe


Pues a partir de ahi yo he visto que:

Vector de entrada..........Salida
[4] -------------------------
Título: Re: Programacion Recursiva
Publicado por: mojayu en Jueves 17 de Enero de 2008, 18:23
Vuelvo a escribir para pedir vuestra ayuda de nuevo. El caso es que necesito hacer la verificacion formal del anterior problema. Lo que es puesto sobre como es la solucion esta comprobado de que esta bien. Pero a la hora de realizar la especificacion formal me estanco en un paso. Suponiedo que la nomenclatura que yo uso es la general (para todos igual) es aqui:

Q(x)^Bnt(x)^R(S(x),y')=>R(x,c(y',x)

Es el paso 4º. Si la nomenclatura es distinta ya paso a poneros que es cada cosa.
Título: Re: Programacion Recursiva
Publicado por: morochofino en Lunes 21 de Enero de 2008, 04:09
void componente_suma(int[n] v, int[n] r, int i){
   if(i<n)
   {   
   int suma=0;
   for(int j=0;j<n;j++)
      if(i!=j)
         suma+=v[j];
   r=suma;
   componente_suma(v,r,i+1);
   }
}

int main(void)
{
       int[n] v,r;
       cargar_vectores(v,r);
       componente_suma(v,r,0);
       mostrar_resultado®;
}

//por ahí tiene unos errores de sintaxis, hay que probarlo.