Muchas gracias por responder!
Claro es verdad, estaba sacando mal el punto medio, como dijo dijsktra. Para la primer división sirve pero para toda la segunda mitad de la primera división ya no. La forma correcta es la que mencionas, (inicio+fin)/2 para obtener el punto medio de cada subdivisión.
Con ese punto medio hice la forma propuesta por YreX-DwX, quedando muy similar a como estaba el programa al inicio, lo dejo abajo por las dudas:
Voy a tener en cuenta usar el [i,...,j) con if ( i == j ) return 0; para subsegmentos.
Gracias!
Claro es verdad, estaba sacando mal el punto medio, como dijo dijsktra. Para la primer división sirve pero para toda la segunda mitad de la primera división ya no. La forma correcta es la que mencionas, (inicio+fin)/2 para obtener el punto medio de cada subdivisión.
Con ese punto medio hice la forma propuesta por YreX-DwX, quedando muy similar a como estaba el programa al inicio, lo dejo abajo por las dudas:
Código [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;
int sumaDyV( int *vec, int inicio, int fin );
int main() {
int longitud;
cout<<"Dimension del vector: ";
cin>>longitud;
int *vec = new int[longitud];
for(int i = 0; i<longitud;i++) {
cout<<"\nNumero en la posicion "<<i<<": ";
cin>>vec[i];
}
cout<<"\nResultado: "<<sumaDyV( vec, 0, longitud-1 );
delete[] vec;
return 0;
}
int sumaDyV( int *vec, int inicio, int fin ) {
if( inicio == fin ) {
return vec[inicio];
}
if( (fin - inicio) == 1) {
return sumaDyV(vec, inicio, inicio) + sumaDyV( vec, fin, fin);
}
else {
return sumaDyV(vec, inicio, (inicio+fin)/2) + sumaDyV( vec, ((inicio+fin)/2)+1, fin);
}
}
Voy a tener en cuenta usar el [i,...,j) con if ( i == j ) return 0; para subsegmentos.
Gracias!