Author
tranngoc
View
224
Download
0
Embed Size (px)
16/9/2009
1
Universidade Federal de Sergipe UFSCurso: Sistema de Informao
Campus: ItabaianaProfessor: Thiago S. Reis Santos
e-mail: [email protected]
Roteiro O que Recursividade? Tcnicas para desenvolver algoritmos recursivos Definio Matemtica de Fatorial Exerccio Resolvido Recursividade Exerccios Torre de Hani
O que Recursividade? Recursividade significa algo ser definido em termos de
si prprio. Em termos de programao: a recursividade uma
tcnica em que uma rotina, no processo de execuo de suas tarefas, chama a si mesma;
A recurso uma tcnica poderosa em definies matemticas;
O que Recursividade?
Uma Imagem Recusiva.
Tcnicas para desenvolver algoritmos recursivos A recurso em programao se d atravs de sub-
rotinas, geralmente funes;
Assim sendo cria-se uma funo que em seu corpo ter uma chamada a si prpria;
Todo cuidado pouco ao se usar funes recursivas, pois facilmente podemos gerar um loop infinito.
Tcnicas para desenvolver algoritmos recursivos A primeira coisa que temos de pensar em um critrio
de parada. Isto impede que a funo chame a s prpria infinita vezes;
Este um requisito fundamental: as chamadas recursivas de um procedimento P devem estar sujeitas uma condio B (condio de parada), a qual, em algum instante, se torna verdadeira.
Finitude dinmica
16/9/2009
2
Definio Matemtica de Fatorial
)!1(*!0 xse1!11 xse1!0 0 xse
!xxx
x
A definio de fatorial de natureza recursiva, ou seja, existe uma chamada a ela mesma em x*(x-1)!
A condio de parada quando x decrementado at o valor 1. Dessa forma encerra-se as multiplicaes sucessivas.
Exerccio - Resolvido Escreva uma funo em Java para o clculo do fatorial
de forma recursiva e de forma iterativa.
// Algoritmo Iterativopublic long fatorial(int x) {
if(x
16/9/2009
3
Exerccios 1) Faa um programa em Java que calculo o valor de
Fibonacci para um n fornecido pelo usurio.
)fib(n)fib(nfib(n)n)fib(n)fib(n
fib(n)211 se
111 se100 se
Exerccios 2) Faa a implementao de forma recursiva do
rastreamento da soluo do problema da Torre de Hani sendo o nmero de disco ser informado pelo usurio (mximo 12).
A Torre de Hani um quebra-cabea que consiste em uma base contendo n pinos, em um dos quais so dispostos alguns discos uns sobre os outros, em ordem crescente de dimetro, de cima para baixo.
Torre de Hani O problema consiste em passar todos os discos de um
pino para outro qualquer, usando um dos pinos como auxiliar, de maneira que um disco maior nunca fique em cima de outro menor em nenhuma situao.
Torre de Hani http://www.prof2000.pt/users/pjca/Jogos_ficheiros/ha
noi/Torre%20de%20Hanoi.html
Torre de Hani interessante observar que o nmero mnimo de
"movimentos" para conseguir transferir todos os discos da primeira estaca terceira 2n-1, sendo n o nmero de discos. Logo:
Para solucionar um Hani de 3 discos, so necessrios 2 -1 movimentos = 7 movimentos
Para solucionar um Hani de 7 discos, so necessrios 127 movimentos
Para solucionar um Hani de 15 discos, so necessrios 32.767 movimentos
Exerccios A resoluo do 2 exerccio deve ser a impresso dos
movimentos dos discos. Ex.: Caso seja com 5 disco a soluo deve ser assim: 1 passo movendo disco A da 1 torre para 3 torre 2 passo movendo disco B da 1 torre para 2 torre 3 passo movendo disco A da 3 torre para 2 torre 4 passo movendo disco C da 1 torre para 3 torre
16/9/2009
4
Referncias
HORSTMANN, Cay S.;CORNELL, Gary. Core Java 2: Volume I - Fundamentos. Traduo: AndrezaGonalves e Marcelo Soares. 7 ed. Rio de Janeiro: Alta Books editora, 2005.
Slides da Professora Maily. Wikipedia,
http://pt.wikipedia.org/wiki/Torre_de_Hanoi