Questão nº 34

Questão de Tecnologia da Informação · FCC SEGEP-MA 2018 (nº 34)

FCC2018Analista Executivo - Programador de SistemasTecnologia da Informação
Gabarito: Aver comentário ↓

Considere o programa Java abaixo.

public class Ordem {
    public static void ordena(int[] A, int n) {
        if (n == 1) {
            return;
        }
        int m = n - 1;
        for (int i = 0; i < n - 1; i++) {
            if (A[i] > A[m]) {
                m = i;
            }
        }
        int t = A[m];
        A[m] = A[n - 1];
        A[n - 1] = t;
        I
    }
    public static void main(String[] args) {
        int[] X = {10, 15, 11, 4, 2, 7};
        ordena(X, X.length);
        for (int i = 0; i < X.length; i++) {
            System.out.print(X[i] + " ");
        }
    }
}

Para que os valores contidos no vetor X sejam apresentados em ordem crescente, a lacuna I deve ser preenchida por

Resposta comentada

Gabarito Alternativa A

A recursão é uma técnica de programação onde uma função resolve um problema chamando a si mesma para resolver uma versão menor do mesmo problema, até atingir um caso base que pode ser resolvido diretamente.

  • (A) Correta: A função ordena encontra o maior elemento no sub-vetor A[0...n-1] e o coloca na posição A[n-1]. Para ordenar o restante do vetor, é necessário chamar a função novamente para o sub-vetor A[0...n-2], o que é feito com ordena(A, n - 1). Isso reduz o problema em uma unidade a cada chamada, caminhando em direção ao caso base n == 1.
  • (B) Incorreta: Esta é uma atribuição de valor, não uma chamada recursiva. Ela não continua o processo de ordenação e pode causar erros lógicos ou de índice.
  • (C) Incorreta: Chamar ordena(A, n) novamente com o mesmo valor de n resultaria em uma recursão infinita. A função nunca alcançaria o caso base n == 1 (a menos que n já fosse 1), fazendo com que o programa travasse ou estourasse a pilha de chamadas (StackOverflowError). Esta é uma armadilha comum para iniciantes em recursão.
  • (D) Incorreta: A variável maior não está definida no escopo do método, causando um erro de compilação. Além disso, é uma atribuição e não uma chamada recursiva.
  • (E) Incorreta: Chamar ordena(A, n + 1) aumentaria o tamanho do problema em vez de diminuí-lo, afastando-se do caso base e potencialmente causando um ArrayIndexOutOfBoundsException se n + 1 exceder o tamanho real do vetor.

Fonte: FCC SEGEP-MA 2018 Analista Executivo - Programador de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho