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],deordemwh,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çãocomacorc1casoccant. OprocessoérepetidorecursivamenteparaosvizinhosacimaI[x+1,y],abaixoI[x‐1,y],à esquerdaI[x,y‐1]eàdireitaI[x,y+1]desdequeestejamdentrodaimagemepossuamcor igualacant,istoé,igualacorasersubstituída. Escrevaprocedimentoqueimplementetalalgoritmo.