Ajuda com um Método Recursivo

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