Lista de exercícios 6 - Recursão

Propaganda
1
Universidade Federal Fluminense
Instituto de Computação
Departamento de Ciência da Computação
Programação de Computadores II
Professores: Leandro A. F. Fernandes, Luiz André P. P. Leme
6ªListadeExercícios
Recursividade
1) Usandorecursividade,calculeasomadetodososvaloresdeumarraydereais.
2) Usandorecursividadeencontreomaiorelementodeumarraydeinteiros.
3) Façaumafunçãorecursivaqueinvertaoselementosdeumvetor.
4) Implementeumabuscaternáriarecursiva.
5) Implementeosseguintesalgoritmosdeformarecursiva.Façaumprogramaquetesteos
procedimentosimplementados.
a)Bubblesort
b)SeleçãoDireta
6) ImplementaroalgoritmoQuickSortparaarraysdeobjetosqueimplementamainterface
IOrdenavel. Por exemplo, instâncias da classe Aluno que contém como atributos uma
notaeumnome.OalgoritmoQuickSortpodeserdescritoemaltonívelpor:
quicksort(a[], p, r)
if r > p then
j = partition(a[], p, r)
quicksort(a[], p, j - 1)
quicksort(a[], j + 1, r)
partition(a[], p, r)
i = p
j = r + 1
pivot = a[p]
do {
do i = i + 1 while (a[i] < pivot)
do j = j - 1 while (a[j] > pivot)
if (i < j) exchange(a[i], a[j])
} while (i < j)
exchange(a[p], a[j])
return j
7) Umpalíndromoéumapalavraqueéigualasimesmalidadetrásparafrente(exemplos:
rotor,arara,etc.).Escrevaumalgoritmorecursivoquedetermineseumapalavraéum
palíndromo.
2
8) Um método bastante utilizado para avaliar polinômios da forma pn(x)= a0xn + a1xn‐1 +
a2xn‐2+...+an‐1x+anéoquesebaseianaRegradeHorner.Ummétodoiterativobaseado
nestaregrasegueoseguinteesquema:
b0  a 0
bi 1  x  bi  ai 1 ; i  0,1,  , n  1
atravésdoqualpode‐seobterbn=pn(x).Umaalternativaconsisteemescrever
pn(x) = x . pn(x ) + an, onde pn‐1(x) = a0xn‐1+a1xn‐2 + + ... + an‐2x + an‐1, que é uma
formulação recursiva para o esquema. Escreva uma versão iterativa e uma versão
recursivadeumalgoritmoparaavaliaçãodepolinômios.
9) NasTorresdeHanoi(vejaimagemabaixo)ojogadordevepassartodososdiscosdeum
pinoparaoutroqualquer,usandoumdospinoscomoauxiliar,demaneiraqueumdisco
maior nunca fique em cima de outro menor em nenhuma situação. Escreva um
programarecursivopararesolveresteproblema.
10)ImplementeumasoluçãoparaoproblemadasTorresdeHanóicom4pinos.
11)ÉdadaabaixoumaimagemqueilustraaCurvadeHilbert.Estacurvaédefinidaporum
procedimentorecursivo.Implementetalprocedimento.
12)Escrevaumalgoritmorecursivocapazdegerartodososelementosdoconjuntopotência
dado conjunto formado por letras. Exemplo X={a,b,c} então 2X =
{,{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}}
13)Escreva um algoritmo recursivo capaz de gerar todas as permutações de uma string
formadaporletrasquenãoserepetem.
14)Umaimagemdiscretadelargurawealturah,podeserrepresentadaemumcomputador
atravésdeumamatrizI[i,j],deordemwh,quearmazenaemcadaposiçãoumnúmero
inteiro entre 0 e 255, o qual especifica uma certa cor em uma paleta de cores. Em
pacotesdepinturainterativos,émuitocomumaoperaçãoqueefetuaopreenchimento
decertaáreadeumaimagemcomumacorcantcomumanovacorc.Estaoperaçãopode
serrealizadadeformasimplesatravésdeummétododenominadoBoundary‐fill.
3
O procedimento em questão recebe como entrada um ponto no interior da região
especificado por índices (x,y) e a cor de preenchimento c. O algoritmo inicialmente
detectaacorcantnoponto(x,y)ecomeçapintandotalposiçãocomacorc1casoccant.
OprocessoérepetidorecursivamenteparaosvizinhosacimaI[x+1,y],abaixoI[x‐1,y],à
esquerdaI[x,y‐1]eàdireitaI[x,y+1]desdequeestejamdentrodaimagemepossuamcor
igualacant,istoé,igualacorasersubstituída.
Escrevaprocedimentoqueimplementetalalgoritmo.
Download