• Sábado 14 de Diciembre de 2024, 22:39

Autor Tema:  Programacion Recursiva  (Leído 2658 veces)

mojayu

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Programacion Recursiva
« en: Miércoles 9 de Enero de 2008, 13:08 »
0
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

fORU-

  • Miembro MUY activo
  • ***
  • Mensajes: 225
  • Nacionalidad: mo
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #1 en: Miércoles 9 de Enero de 2008, 17:08 »
0
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

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);
}
atte:fORU-

mojayu

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #2 en: Miércoles 9 de Enero de 2008, 19:18 »
0
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

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Programacion Recursiva
« Respuesta #3 en: Miércoles 9 de Enero de 2008, 21:45 »
0
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.
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

mojayu

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #4 en: Jueves 10 de Enero de 2008, 00:13 »
0
Tambien se que asi funciona pero eso es iterativo y lo necesito recursivo. Mugas gracias de todas formas

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #5 en: Jueves 10 de Enero de 2008, 09:36 »
0
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.

mojayu

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #6 en: Jueves 10 de Enero de 2008, 16:44 »
0
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] -------------------------
  • [4,7] ------------------------[7,4]
    [4,7,8]-----------------------[15,12,11]
    [4,7,8,10]--------------------[25,22,21,19]

    Ahora tratare de explicar la relacion que tiene con la solucion del subproblema:

    Si nos fijamos en el vector de dos componentes, devuelve otro vector cuyo primer elemento es el vector anterior mas el elemento distinto del vector de entrada del subproblema. Y el ultimo componente es la suma de todos los elementos del vector de entrada del subproblema.

    En el de tres componentes; los dos priemeros elementos del vector que se devuelve son el vector devuelto anteriormente mas la componente distinta al subproblema anterior. y el ultimo elemente igual que antes: la suma de todas las componentes del vector de entrada anterior.

    Va a ser complicado que entendais lo que puse, porque yo para explicarme... voy fatal, pero espero que hallais pillado la idea.

    Saludos y gracias otra vez.

mojayu

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #7 en: Jueves 17 de Enero de 2008, 18:23 »
0
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.

morochofino

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Programacion Recursiva
« Respuesta #8 en: Lunes 21 de Enero de 2008, 04:09 »
0
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.