Galera, pra mim método recursivo ainda é um bicho de 700 cabeças e estou com muitas dúvidas de como resolveria isso aqui:
3_Construa um método recursivo que desloque o maior valor de um arranjo de reais para a última posição do arranjo.
Alguém poderia postar a resolução com uma explicação?
um arranjo eu imagino que pode ser um array?
algo como
array = 9, 1, 2 , 3
sabendo que 9 é o valor maior, vc quer isso:
array = 1, 2, 3, 9
?
se sim, temos 2 problemas:
a) encontrar o valor maior.
b) dado que vc encontrou-o, remover do array e jogar para no fim.
é um array ou uma lista encadeada?
Tem q só pegar o maior valor do array e trocar com o ultimo valor, usando recursividade
Acho que voce queira algo mais ou menos assim:
public class Recursividade{
public static void main(String[] args){
int[] array ={5,3,4,2,-6};
ordemCrescente(array);
}
private static void ordemCrescente(int[] arranjo){
for(int x = 0; x <= arranjo.length; x++){
for(int y = x + 1; y < arranjo.length; y++){
if(arranjo[x] > arranjo[y]){
int z = arranjo[x];
arranjo[x] = arranjo[y];
arranjo[y] = z;
}
}
}
for(int i = 0; i < arranjo.length;i++){
System.out.println(arranjo[i]);
}
}
}
nao me parece muito… recursivo isso
1 curtida
Não sou bom com método recursivo, mas consegui fazer o que você queria, provavelmente dá pra melhorar e muito:
public static void main(String[] args) {
int[] n = new int[] { 4, 6, 1, 3, 12, 9, 8, 7 };
trocarMaior(n, 0, 1);
for (int i = 0; i < n.length; i++) {
System.out.print(n[i] + " ");
}
}
public static void trocarMaior(int[] n, int atual, int posMaior) {
System.out.println("atual= " + atual + ", posMaior= " + posMaior);
if (n[atual] > n[posMaior]) {
System.out.println("-> n[atual]=" + n[atual] + " > n[posMaior]=" + n[posMaior] + " ?");
trocarMaior(n, atual + 1, atual);
} else if(atual != n.length -1){
System.out.println("n[atual]= " + n[atual] + " < n[posMaior]= " + n[posMaior] + " ?");
trocarMaior(n, atual + 1, posMaior);
}else if(atual == n.length -1){
System.out.println("Acabou, trocar para colocar maior no final");
int aux = n[n.length-1];
n[n.length - 1] = n[posMaior];
n[posMaior] = aux;
}
}
Output:
atual= 0, posMaior= 1
n[atual]= 4 < n[posMaior]= 6 ?
atual= 1, posMaior= 1
n[atual]= 6 < n[posMaior]= 6 ?
atual= 2, posMaior= 1
n[atual]= 1 < n[posMaior]= 6 ?
atual= 3, posMaior= 1
n[atual]= 3 < n[posMaior]= 6 ?
atual= 4, posMaior= 1
-> n[atual]=12 > n[posMaior]=6 ?
atual= 5, posMaior= 4
n[atual]= 9 < n[posMaior]= 12 ?
atual= 6, posMaior= 4
n[atual]= 8 < n[posMaior]= 12 ?
atual= 7, posMaior= 4
Acabou, trocar para colocar maior no final
4 6 1 3 7 9 8 12