minimoRecursivo

Preciso escrever um método recursivo minimoRecursivo que determina o menor elemento em um array de inteiros, mas não estou conseguindo. Poderiam me ajudar? Segue o código…

/**
 *
 * @author william
 */
public class MinimoRecursivo {

    public static int minimoRecursivo (int v[], int index, int num){
        int minimo = num;

        if (minimo > v[num+1]) {
            minimo = v[index];
            minimoRecursivo(v,  index-1, num);
        } else
            return minimo;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        System.out.println ("Informe o tamanho do vetor:");
        int size = sc.nextInt ();
        int array [] = new int [size];
        System.out.println("\nEntre com valores inteiros para o vetor:\n");
        for (int x=0; x<size; x++){
            System.out.printf ("Etapa %d de %d\n", x+1, size);
            array[x] = sc.nextInt();
        }

        System.out.printf ("O menor valor do array e': %d \n", 
                MinimoRecursivo.minimoRecursivo(array, array.length, array[0]));
    }
}

Cara…

Para se achar o menor recursivamente você tem que ir até o último elemento do vetor e assumir que ele é o menor… quando você voltar, através dessa abordagem recursiva, você compara o último elemento com o penúltimo, se o penúltimo for menor ele passa a ser o “pivô”, o alvo das comparações se não o último elemento continua sendo o menor, e assim por diante… veja como ficou o código…

public class MinimoRecursivo {  
  
    public static int achaMinimoRecursivamente (int v[], int index){  
    	if (v.length == 0){
    		throw new RuntimeException("Vetor vazio!");
    	}
    	
    	if (index == (v.length - 1)){
    		return v[index]; //chegamos ao último, assumindo que ele é o menor
    	}
    	
    	int menor = achaMinimoRecursivamente(v, index + 1); //avançando uma posição no vetor (andando para frente)
    	
        // a partir daqui estamos voltando no vetor
    	if (v[index] < menor) //o atual é menor que o menor?
    		return v[index]; //Se vier até aqui, a resposta é sim, ou seja, o atual será o menor
    	
    	return menor; //se chegar até aqui, a resposta é não, ou seja, o menor continua sendo o menor!
    	
    }  
  
    public static void main(String[] args) {  
        Scanner sc = new Scanner (System.in);  
        System.out.println ("Informe o tamanho do vetor:");  
        int size = sc.nextInt ();  
        int array [] = new int [size];  
        System.out.println("\nEntre com valores inteiros para o vetor:\n");  
        for (int x=0; x<size; x++){  
            System.out.printf ("Etapa %d de %d\n", x+1, size);  
            array[x] = sc.nextInt();  
        }  
  
        System.out.printf ("O menor valor do array e': %d \n",   
                MinimoRecursivo.achaMinimoRecursivamente(array, 0));  //esse zero é porque começaremos a olhar a primeira posição do vetor
    }  
}

ok?

public class TesteCalendar {
	public static int minimo(int v[] , int num , int pos) {
		int result = num ;
		
		
		if ( pos == v.length) 
			return result;
		
		
		if ( v[pos] < num ) {
			num = v[pos];
			return minimo(v,v[pos],pos+1);
		}else {
			return minimo(v,num,pos+1);
		}
			
		
	}
	
	public static void main(String[] args) {
		int[] v = {1,2,3,-1 ,200,-90};
		

		System.out.println("MINIMO : " + minimo(v,v[0],0));

		
	}

}

Muito Obrigado Renamed! O método está correto, sou mto grato!!!

Valeu e obrigado pela força!!!