Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mínimo de un vector (recursividad)

Estas en el tema de Mínimo de un vector (recursividad) en el foro de C/C++ en Foros del Web. Hola. Estoy calculando el mínimo de un vector mediante recursividad, pero no obtengo el resultado esperado... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original /* 22.- Escriba ...
  #1 (permalink)  
Antiguo 08/04/2012, 13:29
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Mínimo de un vector (recursividad)

Hola.

Estoy calculando el mínimo de un vector mediante recursividad, pero no obtengo el resultado esperado...

Código C:
Ver original
  1. /* 22.- Escriba una función recursiva que busque el mínimo de un vector. */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. int minimo(int V[], int n)
  7. {
  8.     int min = V[0];
  9.    
  10.     if(n == 0) return min;
  11.    
  12.     else
  13.     {
  14.     if(V[n] < min) min = V[n];
  15.          
  16.     return minimo(V, n-1);
  17.     }  
  18. }
  19.  
  20. int main()
  21. {
  22.     int V[] = {2,1,3,5,-1,1};
  23.     int min;
  24.    
  25.     min = minimo(V, 5);
  26.    
  27.    
  28.    
  29.     printf("El minimo es %d\n\n", min);
  30.    
  31.    
  32.  system("pause");
  33.  return 0;  
  34. }

Gracias.

Saludos.
  #2 (permalink)  
Antiguo 08/04/2012, 13:46
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Mínimo de un vector (recursividad)

Hola! el problema esta en hacer esto: int min = V[0];. siempre inicializas a min con el valor 2(posicion 0 del arreglo) y cuando "n" sea cero vos retornas ese 2. Por lo tanto hacer esto: if(V[n] < min) min = V[n]; no influye en nada para el retorno en cada funcion

Si no es obligatorio usar ese prototipo para la funcion minimo, usa este:
Código C:
Ver original
  1. int minimo(int V[], int n, int min)
y contame si te sale

Saludos
  #3 (permalink)  
Antiguo 08/04/2012, 13:54
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Mínimo de un vector (recursividad)

Pero entonces en main debo darle entonces un valor al tercer parámetro (o asignarle una variable), pero como los valores del vector pueden variar...

Gracias.

Saludos.
  #4 (permalink)  
Antiguo 08/04/2012, 13:59
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Mínimo de un vector (recursividad)

Asi como vos tomaste el valor V[0] para min, lo podrias hacer en la llamada, ej:
Código C:
Ver original
  1. int V[] = {2,1,3,5,-1,1};
  2.     int min=V[0]; // suponemos que el valor minimo es V[0]
  3.    
  4.     min = minimo(V, 5, min);

Saludos
  #5 (permalink)  
Antiguo 08/04/2012, 14:14
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Mínimo de un vector (recursividad)

¡Muchas gracias!

Ya lo he entendido.

Saludos.
  #6 (permalink)  
Antiguo 19/02/2015, 06:55
 
Fecha de Ingreso: febrero-2015
Mensajes: 1
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Mínimo de un vector (recursividad)

Respuesta usando stl vector¡¡¡

Código:
//demostracion de la plantilla de clase vector
#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;

#include<iterator>



void minimo( vector<int> & enteros2,size_t sub);
//prototipo para la plantilla de funcion imprimirVector
template <typename T> void imprimirVector(const vector<T> & enteros2);


int main()
{
	int const MAX=6;//depende del tamaño 
	int a[MAX]={2,1,3,5,-1,1};//{19,3,-40987,-334,5,40,20,20,-9,152};
//{44,83,-14,1,101,-92,23,2,7,100};
	std::vector<int>enteros(a,a+MAX);
	

	minimo(enteros,0);	

}

		
template <typename T> void imprimirVector(const vector<T> & enteros2)
{
	typename vector<T>::const_iterator iteratorConst; //const_iterator
	
	//muestra los elementos del vector usando const_iterator
	for(iteratorConst =enteros2.begin();iteratorConst!=enteros2.end();++iteratorConst)
	   cout<<*iteratorConst<<' ';

}

	
void minimo( vector<int> & enteros2,size_t sub)
{
	int low;
	
	if(sub<=enteros2.size())
	{	
		
		if(enteros2[sub]<=enteros2[0])
		{				
		low=enteros2[sub];		
		enteros2[0]=low;		
		}
		
		minimo(enteros2,sub+1);
			
		if(sub==enteros2.size())
			cout<<"menor: "<<enteros2[0]<<endl;					
				//imprimirVector(enteros2);
	}
	
}
  #7 (permalink)  
Antiguo 19/02/2015, 07:38
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Mínimo de un vector (recursividad)

Cita:
Iniciado por manuelcastellano97 Ver Mensaje
Respuesta usando stl vector¡¡¡
Te agradeceríamos que no revivieses hilos muertos.

Este post llevaba inactivo casi 3 años!!!

Etiquetas: int, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 10:47.