Projete em pseudocódigo uma função recursiva rotacionar_direita(L, k) que recebe uma lista L e um inteiro k =…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Elaborar algoritmos que envolvam instruções sequenciais, de repetição e de seleção usando uma linguagem de programação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Projete em pseudocódigo uma função recursiva rotacionar_direita(L, k) que recebe uma lista L e um inteiro k = 0 e retorna nova lista com os elementos rotacionados k posições à direita. Use apenas operações de lista básicas (cabeça/cauda, len, concatenar) e evite laços iterativos.
✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.
Resposta esperada
funcao rotacionar_direita(L,k): se L == [] entao retorne L n <- len(L) r <- k mod n se r == 0 entao retorne L /* mover último elemento para frente r vezes recursivamente */ funcao mover_uma(L): se L == [] ou len(L) == 1 entao retorne L ultimo <- L[len(L)-1] init <- L[0:len(L)-1] retorne concatenar([ultimo], init) se r == 1 entao retorne mover_uma(L) senao return rotacionar_direita(mover_uma(L), r-1) Observações: primeiro reduzimos k por modulo n. A operação mover_uma coloca o último elemento na cabeça; aplicando-a r vezes obtemos a rotação à direita por r posições. A solução é recursiva e usa apenas operações básicas de lista. Complexidade: O(r·n) no método direto; pode ser otimizada concatenando sublistas em O(n) usando divisão em duas fatias quando necessário.
Explicação
A solução utiliza recursão para mover o último elemento da lista para a frente repetidamente, o que efetivamente realiza a rotação à direita. O uso do operador módulo permite otimizar o número de rotações, evitando operações desnecessárias quando k é maior que o tamanho da lista. Além disso, a função respeita as restrições de usar apenas operações básicas de lista, garantindo a simplicidade e eficiência do algoritmo.
Raio-X da questão
função recursiva
fixacao
funções recursivas · operações com listas
Revisar conceitos de listas e recursão em programação.
O aluno pode confundir a lógica de rotação, tentando usar laços iterativos em vez de recursão.
ciencia_tecnologia
criatividade
abstrato
Questões parecidas com resolução
- Projete em pseudocódigo uma função recursiva permutar(L) que recebe uma lista L com n elementos distintos e retorna uma…
- Projete em pseudocódigo uma função recursiva duplicar(L) que recebe uma lista L de inteiros e retorna uma nova lista em…
- Projete em pseudocódigo uma função recursiva separar_indices(L) que recebe uma lista L e retorna duas listas: elementos…
- Projete em pseudocódigo um algoritmo recursivo compress_consecutivos(L) que recebe uma lista L e retorna uma nova lista…
- Apresente, em pseudocódigo resumido, o algoritmo in-place que rotaciona à direita um vetor A[0..n-1] por k posições…
- Projete em pseudocódigo uma função recursiva maximo(L) que recebe uma lista não vazia de inteiros e retorna o maior…
🔎 Procurar outra questão
Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.
Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog
