SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Perrero en Sábado 30 de Junio de 2007, 22:07

Título: Ayuda Con Recursividad
Publicado por: Perrero en Sábado 30 de Junio de 2007, 22:07
Estoy aprendiendo recursicidad y me estoy haciendo bolas al tratar de sumar los elementos de un arreglo recursivamente. Este es el codigo de mi funcion suma

Código: Text
  1.  
  2. int Sumar(int item)  //item es la ultima posicion del arreglo
  3.    {
  4.       if (item==0)
  5.          return (0);
  6.       else
  7.          return (Vec[item] + Vec[Sumar(item-1)]);
  8.    }
  9.  
  10.  

No se que es lo que estoy haciendo mal. Alguien podria indicarme en que estoy fallando?
Título: Re: Ayuda Con Recursividad
Publicado por: Mollense en Sábado 30 de Junio de 2007, 23:36
Código: Text
  1. int Sumar(int item)  //item es la ultima posicion del arreglo
  2.   {
  3.      if (item==0)
  4.     return (Vec[0]);
  5.      else
  6.     return ( Vec[item] + Sumar(item-1) );
  7.   }
  8.  
Título: Re: Ayuda Con Recursividad
Publicado por: Perrero en Domingo 1 de Julio de 2007, 03:09
Me sigue sin salir  :( , lo que quiero hacer es sumar de manera recursiva los elementos de un vector, pero me bota un numero muy bajo, por ejemplo 13 cuando deberia ser 60 o 70 y aveces me da error, esa logica esta bien?
Título: Re: Ayuda Con Recursividad
Publicado por: Mollense en Domingo 1 de Julio de 2007, 03:21
Si, creería que si. A ver, mostrame el código completo.
Título: Re: Ayuda Con Recursividad
Publicado por: Perrero en Domingo 1 de Julio de 2007, 03:40
Bueno, la operacion encargada de sumar la tengo en una clase, es esta:

Código: Text
  1.  
  2.    Suma::Suma()
  3.    {
  4.       items = 0;
  5.    }
  6.    Suma::~Suma()
  7.    {
  8.    }
  9.    void Suma::Generar_Nueros()
  10.    {
  11.       int n;
  12.  
  13.       n = random(20) +5;
  14.       for (int i=0;i<n;i++)
  15.       {
  16.          Vec[i] = random(10) + 1;
  17.          items++;
  18.       }
  19.    }
  20.    int Suma::Sumar(int item)
  21.    {
  22.       if (item==0)
  23.          return (Vec[0]);
  24.       else
  25.          return (Vec[item] + Vec[Sumar(item-1)]);
  26.    }
  27.    AnsiString Suma::Mostrar()
  28.    {
  29.       AnsiString Cadena="";
  30.  
  31.       for (int i=0;i<items;i++)
  32.          Cadena+=(AnsiString)Vec[i]+",";
  33.  
  34.       return (Cadena);
  35.    }
  36.    int Suma::GetItems()
  37.    {
  38.       return (items);
  39.    }
  40.  
  41.  

y hago invocacion a la funcion desde aqui:

Código: Text
  1.  
  2.    suma->Generar_Nueros();
  3.    Edit1->Text = suma->Sumar(suma->GetItems()-1);
  4.    Edit2->Text = suma->Mostrar();
  5.  
  6.  

Bueno, espero que me puedan ayudar, gracias de antemano.
Título: Re: Ayuda Con Recursividad
Publicado por: Mollense en Domingo 1 de Julio de 2007, 04:34
Prestale especial atención a esta linea
Código: Text
  1. return (Vec[item] + Vec[Sumar(item-1)]);
  2.  
Analizala y fijate como la puse mas arriba, aún no la corregiste.
"Vec[Sumar(item-1)]" Siempre te va a devolver el mismo valor, el de Vec en la posición Sumar(item-1) que puede ser el valor de un elemento de tu vector o no dependiendo del valor que retorne la función.-