Escolar Documentos
Profissional Documentos
Cultura Documentos
Hoje
!
Excepes.
! As torres de Hanoi.
Fac. Cincias
Univ. Lisboa
Recurso
Fac. Cincias Univ. Lisboa
Definio
! Um problema recursivo quando pode ser decomposto
decomposto
numa ou mais verses
mais simples
! de si prprio.
Fac. Cincias
Univ. Lisboa
Exemplo n = 1 + (n1)
!
Caso contrrio:
!
!
Limpar o primeiro
Limpar o resto da pilha
Fac. Cincias
Univ. Lisboa
Exemplo n = 2 x (n/2)
! Para procurar um elemento alvo num array ordenado
Caso contrrio
! Se o elemento central do array igual ao alvo, devolver o
!
devolver o resultado
Caso contrrio procurar recursivamente nos elementos depois
do central e devolver o resultado
Fac. Cincias
Univ. Lisboa
Esquema geral
! Se o problema pode ser resolvido para o valor corrente
de n, resolv-lo
!
Caso contrrio
!
!
Caso base
Caso de
recurso
Fac. Cincias
Univ. Lisboa
Passos de desenvolvimento
! Tem que haver um caso (caso base), para um valor
Fac. Cincias
Univ. Lisboa
Construo da soluo
!
Fac. Cincias
Univ. Lisboa
Exemplo
!
Fac. Cincias
Univ. Lisboa
Outro exemplo
!
chamada
recursiva
c
o
u
v
e
Fac. Cincias
Univ. Lisboa
Inverter a string
!
e
v
u
o
c
Fac. Cincias
Univ. Lisboa
Prova da correco
!
! No nosso caso:
!
Verificar que o caso base reconhecido e resolvido
correctamente
!
Verificar que cada caso recursivo progride em direco ao caso
base
!
Veificar que se os problemas menores forem resolvidos
correctamente ento o problema original tambm resolvido
directamente
Fac. Cincias
Univ. Lisboa
Trao de execuo
! O trao mostra a sequncia de chamadas e retornos
Fac. Cincias
Univ. Lisboa
Pilha de execuo
! A pilha de execuo contm activation frames
Fac. Cincias
Univ. Lisboa
Combinando os dois
valores de
retorno
Fac. Cincias
Univ. Lisboa
Algoritmos recursivos
Fac. Cincias
Univ. Lisboa
Caso contrrio
! Se o primeiro elemento igual ao alvo
! O resultado o ndice desse elemento
Caso contrrio
!
Fac. Cincias
Univ. Lisboa
O Mtodo java
Fac. Cincias
Univ. Lisboa
Caso contrrio
!
!
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
ordenao CARA.
!
Fac. Cincias
Univ. Lisboa
recursivas
Fac. Cincias
Univ. Lisboa
mtodo size()
Fac. Cincias
Univ. Lisboa
toString()
Fac. Cincias
Univ. Lisboa
replace()
Fac. Cincias
Univ. Lisboa
add(E data)
Fac. Cincias
Univ. Lisboa
remove(E outData)
Fac. Cincias
Univ. Lisboa
remove(E outData)
Fac. Cincias
Univ. Lisboa
not-target1
not-target2
target
not-target3
inData
inData
head
not-target1
not-target2
target
not-target3
Fac. Cincias
Univ. Lisboa
Torres de Hani
!
Regras:
! um disco no pode ser colocado sobre um disco menor
Fac. Cincias
Univ. Lisboa
Anlise
! Inputs:
!
Nmero de discos a mover
!
!
!
Pino de origem
Pino de destino
Pino temporrio
! Outputs:
! Uma String com a sequncia de movimentos
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Caso contrrio
! Mover os n1 discos do topo da origem para o
temporrio
! Mover o disco n da origem para o destino
! Mover os n1 discos do topo do temporrio para o
destino
Fac. Cincias
Univ. Lisboa
Em java
Fac. Cincias
Univ. Lisboa