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]));
}
}
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
}
}
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));
}
}