Buscar

Exercício de Algoritmos de Avançados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Ciência da Computação 
 
Questão 1 
Analise as sentenças abaixo sobre recursividade. 
• Um programa recursivo é um programa que chama a si mesmo. 
• Uma função recursiva é definida em termos dela mesma. 
• A recursividade pode ser classificada como direta ou indireta. 
• Para cada chamada de uma função recursiva os parâmetros e as variáveis 
locais são empilhados na pilha de execução. 
• A recursividade é a única alternativa para a implementação do algoritmo 
Merge Sort. 
Assinale a alternativa que contém a sequência correta. 
 
 
V,V,V,V,V 
 
V,V,V,V,F 
 
V,F,V,V,F 
 
F,V,V,V,F 
 
F,V,F,F,V 
 
Questão 2 
Qual das linhas abaixo completa o algoritmo de particionamento do QuickSort ? 
PARTICIONAR(A, inicio, fim) 
1 x <-- A[fim] 
2 i <-- inicio - 1 
3 for j <-- inicio to fim-1 
4 if A[j]<= x 
5 i <-- i + 1 
6 {SENTENCA} 
7 trocar A[i + 1] <-> A[fim] 
8 return i + 1 
 
 
6 {SENTENCA} = trocar A[j] <- A[inicio]. 
 
6 {SENTENCA} = trocar A[i+1] <- A[fim]. 
 
6 {SENTENCA} = trocar A[fim] <- A[j-1]. 
 
6 {SENTENCA} = trocar A[i] <- A[j]. 
 
6 {SENTENCA} = trocar A[j] <- A[fim]. 
 
 
Questão 3 
Assinale a opção correta. Sobre o Mergesort é correto afirmar que : 
 
 
É uma ordenação por intercalação que no pior caso tem complexidade 
O(nlog2 n). 
 
É uma ordenação por trocas que no pior caso tem complexidade O(log2 n). 
 
Trabalha com um pivô para separar os dados que depois serão intercalados. 
 
Trabalha dividindo a lista apenas uma vez. 
 
Só pode ser implementado de forma recursiva, pois usa a técnica de divisão 
e conquista. 
 
 
Questão 4 
Qual dos algoritmos abaixo expressa apropriadamente a multiplicação de dois 
números de forma recursiva ? 
 
 
function multiplica(a,b){ if(b==1){ return 0; }else{ return a + 
multiplica(a,b-1) } }. 
 
 function multiplica(a,b){ if(b==1){ return a; }else{ return a + 
multiplica(b,a-1) } }. 
 
function multiplica(a,b){ if(b==1){ return a; }else{ return a + 
multiplica(a,b-1) } }. 
 
 function multiplica(a,b){ if(a==1){ return a; }else{ return a + 
multiplica(a,b-1) } }. 
 
function multiplica(a,b){ if(b==1){ return a; }else{ return b + 
multiplica(a,b-1) } }. 
 
 
Questão 5 
Assinale a opção correta. O que faz a função G definida a seguir ? 
int G (int n) { 
 if (n == 0) 
 return(1); 
 return(n * G(n-1)); 
} 
 
Multiplica os inteiros de n até 0, inclusive. 
 
Calcula o fatorial de um inteiro n passado como parâmetro. 
 
Não executa corretamente, pois não tem caso base. 
 
Irá retornar 9 se passado o valor n igual a 3, pois calculará 3 * 3 * 3. 
 
Multiplica os inteiros de 0 até n-1, inclusive.

Continue navegando