suma de los elementos mayores a 100 en un array c/Recursividad

Iniciado por adriana13, 19 Octubre 2018, 21:35 PM

0 Miembros y 1 Visitante están viendo este tema.

adriana13

Hola! tengo que hacer este ejercicio y no entiendo por qué no suma nada, cuando compilo me da como resultado 1. si me pueden ayudar por favor!!

/*5: Realizar una función recursiva que permita calcular la suma de los valores de un vector de 20 posiciones,
donde cada valor es un entero. Los valores que deben sumarse son solamente aquellos que sean mayores a 100.*/
#include<stdlib.h>
#include <stdio.h>
#include<time.h>

int suma(int vector[], int i);

int main(){
   int vector[20], i=0;
   
    srand(time(0));
   
    for(i=0; i<20; i++){
      
      vector= 1+ rand() % 300;
      
   }
   for (i=0;i<20; i++){
   printf("\n%i", vector);}
   
printf("\nEl resultado de la suma es: %i", suma(vector, i));
return 0;   
}

int suma(int vector[], int i){
   int  sumar=0;
   
   for (i=0;i<20; i++){
   
   if(i<100){
      return 1;
   }
   else if (i>100){
      
      return sumar= suma(vector,i-1) + vector [i-1];
   }
   }
}

Beginner Web

#include<stdlib.h>
#include <stdio.h>
#include<time.h>

int suma(int vector[], int i);

int main()
{
int vector[20], i=0;   
srand(time(0));
    for(i=0; i<20; i++){
       vector[i]= 1+ rand() % 300;
    }
    for(i=0;i<20; i++){
    printf("\n%i", vector[i]);
}
    printf("\nEl resultado de la suma es: %i", suma(vector, i));
return 0;   
}

int suma(int vector[], int i)
{
if(i==-1)
return 0;
else{
if(vector[i]>100){
return vector[i]+suma(vector,i-1);
}
else{
return suma(vector,i-1);
}
}
}
7w7

huchoko

Voy a añadir algo aparte de la excelente respuesta de Beginner Web,
Este es la parte del código que está mal:

for(i=0; i<20; i++){
       
       vector= 1+ rand() % 300;
       
}

La razón por que no funciona es por que no estás accediendo a ningún elemento del vector, se te olvido colocar los [] en la variable vector.
De paso te recomiendo que no aglutines los elementos en funciones, funciones de control, etc.

for(i = 0; i < 20; ++i)
{
    //foo
}

adriana13


adriana13

Cita de: Beginner Web en 19 Octubre 2018, 23:47 PM
#include<stdlib.h>
#include <stdio.h>
#include<time.h>

int suma(int vector[], int i);

int main()
{
int vector[20], i=0;   
srand(time(0));
    for(i=0; i<20; i++){
       vector[i]= 1+ rand() % 300;
    }
    for(i=0;i<20; i++){
    printf("\n%i", vector[i]);
}
    printf("\nEl resultado de la suma es: %i", suma(vector, i));
return 0;   
}

int suma(int vector[], int i)
{
if(i==-1)
return 0;
else{
if(vector[i]>100){
return vector[i]+suma(vector,i-1);
}
else{
return suma(vector,i-1);
}
}
}




Gracias!! anduvo perfecto pero me podrias explicar por qué se pone en el caso base  if i== -1?? eso no lo entiendo y despues al final por que se pone un else antes del return suma. gracias!!

Beginner Web

#5
Código (cpp) [Seleccionar]
int suma(int vector[], int i)//Esto recorre el arreglo desde la utima posicion
{
if(i==-1)//<-Es el caso base que indica que el vector esta vacio y ya no tiene que
                   //volver a llamar a la funcion recursiva
                   //y empezar a retornar todos los valores obtenidos en cada llamada recursiva
return 0;
else{
if(vector[i]>100){
return vector[i]+suma(vector,i-1);
}
else{
return suma(vector,i-1);
}
}
}


Tambien podias haberlo hecho a la inversa

Código (cpp) [Seleccionar]
int suma(int vector[], int i)//Esto recorre el arreglo desde la primera posicion
{
if(i==20)//<<-Se termino de recorrer el vector, se detienen las llamadas recursivas
return 0;
else{
if(vector[i]>100){
return vector[i]+suma(vector,i+1);
}
else{
return suma(vector,i+1);
}
}
}
7w7

adriana13

Cita de: Beginner Web en 20 Octubre 2018, 21:33 PM
int suma(int vector[], int i)
{
   if(i==-1)//<<--Es el caso base que indica que el vector esta vacio y ya no tiene que volver a llamar a la funcion recursiva y empezar a retornar todos los valores obtenidos en cada llamada recursiva
      return 0;
   else{
      if(vector>100){
          return vector+suma(vector,i-1);
       }
       else{
          return suma(vector,i-1);
      }
   }
}


gracias!!! entendi perfecto