mc102 – aula 26 recursão instituto de computação unicamp 04 de dezembro de 2014
TRANSCRIPT
![Page 1: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/1.jpg)
MC102 – Aula 26Recursão
Instituto de Computação Unicamp04 de Dezembro de 2014
![Page 2: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/2.jpg)
Recursão
Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma
ExemploCálculo do fatorial de um número:
𝑓 𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛)={ 1𝑠𝑒𝑛=0𝑛∗ 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛−1 )𝑠𝑒𝑛>0
![Page 3: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/3.jpg)
Fatorial
𝑓 𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛)={ 1𝑠𝑒𝑛=0𝑛∗ 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛−1 )𝑠𝑒𝑛>0
0! = 11! = 1 * 12! = 2 * 13! = 3 * 2 * 14! = 4 * 3 * 2 * 15! = 5 * 4 * 3 * 2 * 1 Função Iterativa
Função Iterativa
![Page 4: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/4.jpg)
Fatorial
𝑓 𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛)={ 1𝑠𝑒𝑛=0𝑛∗ 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛−1 )𝑠𝑒𝑛>0
0! = 11! = 1 * 12! = 2 * 13! = 3 * 2 * 14! = 4 * 3 * 2 * 15! = 5 * 4 * 3 * 2 * 1
0! = 11! = 1 * 0!2! = 2 * 1!3! = 3 * 2!4! = 4 * 3!5! = 5 * 4!
![Page 5: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/5.jpg)
Fatorial1 5! = 5 * 4!2 4! = 4 * 3!3 3! = 3 * 2!4 2! = 2 * 1!5 1! = 1 * 0!6 0! = 1
6’ 0! = 15’ 1! = 1 * 0! = 1 * 1 = 1 4’ 2! = 2 * 1! = 2 * 1 = 23’ 3! = 3 * 2! = 3 * 2 = 62’ 4! = 4 * 3! = 4 * 6 = 241’ 5! = 5 * 4! = 5 * 24 = 120
![Page 6: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/6.jpg)
Fatorial1 5! = 5 * 4!2 4! = 4 * 3!3 3! = 3 * 2!4 2! = 2 * 1!5 1! = 1 * 0!6 0! = 1
120
![Page 7: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/7.jpg)
Fatorial
𝑓 𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛)={ 1𝑠𝑒𝑛=0𝑛∗ 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 (𝑛−1 )𝑠𝑒𝑛>0
0! = 11! = 1 * 0!2! = 2 * 1!3! = 3 * 2!4! = 4 * 3!5! = 5 * 4!
Função Recursiva
Função Iterativa
![Page 8: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/8.jpg)
Recursão e a Pilha de Execução (stack)
Supõe que façamos• int x = fatorial(4);
XFunção Recursiva
![Page 9: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/9.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
![Page 10: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/10.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
![Page 11: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/11.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
fatorial(2)2
Retorno
n
![Page 12: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/12.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
fatorial(2)2
Retorno
nfatorial(1)
1
Retorno
n
![Page 13: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/13.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
fatorial(2)2
Retorno
nfatorial(1)
1
Retorno
n
fatorial(0)
0
Retorno
n
![Page 14: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/14.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
fatorial(2)2
Retorno
nfatorial(1)
1
Retorno
n1Retorno
![Page 15: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/15.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
fatorial(2)2
Retorno
n1Retorno
![Page 16: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/16.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
fatorial(3)
3
Retorno
n
2Retorno
![Page 17: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/17.jpg)
4
Recursão e a Pilha de Execução (stack)
fatorial(4)
XRetorno
n
6Retorno
![Page 18: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/18.jpg)
24
Recursão e a Pilha de Execução (stack)
XRetorno
Supõe que façamos• int x = fatorial(4);
Função Recursiva
![Page 19: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/19.jpg)
Recursão e a Pilha de Execução (stack)
X 24
Supõe que façamos• int x = fatorial(4);
Função Recursiva
![Page 20: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/20.jpg)
Elementos de uma função recursiva
• Condição de parada ou caso base ou caso trivial:• É a parte da definição da função que não faz chamada recursiva
• Chamada recursiva propriamente dita ou passo de recursão: • Deve resolver uma instância menor do mesmo problema
• Processamento de apoio ou processamento complementar: • Demais processamentos que acompanham e/ou utilizam o que resulta
da chamada recursiva
![Page 21: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/21.jpg)
Exemplo: Condição de Parada
Elementos de uma função recursiva
![Page 22: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/22.jpg)
Exemplo: Chamada recursiva a uma instância menor
Elementos de uma função recursiva
![Page 23: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/23.jpg)
Exemplo: Processamento de apoio
Elementos de uma função recursiva
![Page 24: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/24.jpg)
Importante
• Se não existir o caso base (condição de parada), o programa entra em loop infinito
• Se a chamada recursiva não for aplicada a uma instância menor do problema, o programa entra em um loop infinito
• Se um função recursiva ficar chamando a si mesma indefinidamente (num loop infinito) o programa rapidamente para por “estouro da pilha” (stack overflow)
![Page 25: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/25.jpg)
Fibonacci• O número de Fibonacci Fn para n>=0 é definido da seguinte maneira:
![Page 26: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/26.jpg)
Fibonacci• O número de Fibonacci Fn para n>=0 é definido da seguinte maneira:
Função Recursiva
Exercício 01 – Faça uma função recursiva para calcular o número de Fibonacci.
![Page 27: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/27.jpg)
Fibonacci• O número de Fibonacci Fn para n>=0 é definido da seguinte maneira:
Função Recursiva
Exercício 01
Faça um programa para imprimir a sequência de Fibonacci.
![Page 28: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/28.jpg)
Sequência de Fibonacci
![Page 29: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/29.jpg)
Exercício 2
O que faz o programa abaixo? Justifique!
Processamento de apoio?
![Page 30: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/30.jpg)
Torre de Hanói• A lenda diz que num templo perdido na Ásia uns monges estão
tentando mover 64 discos de tamanhos diferentes de um pino para outro, usando um terceiro como auxiliar, de tal forma que:• Nunca um disco maior é colocado sobre um menor
• De acordo com a lenda o mundo se acaba no momento que esta tarefa é completada.
![Page 31: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/31.jpg)
Torre de Hanói• Estado inicial: • pilha de discos ordenados pelo raio
• Objetivo: • transferir a pilha de discos para uma das outras pilhas vazias
• Restrição:• Mover um disco por vez• Um disco de raio maior não pode estar sobre um disco de raio menor
![Page 32: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/32.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
![Page 33: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/33.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
3 21
![Page 34: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/34.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
![Page 35: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/35.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
• Ok, mas só podemos mover um disco por vez
• Como a pilha com os 2 discos menores foi parar no pino C, e depois no pino B?
![Page 36: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/36.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
![Page 37: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/37.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
32
1
Movimento = 1
Mova o disco 1 do pino A para o pino B
![Page 38: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/38.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
3 2 1
Movimento = 2
Mova o disco 2 do pino A para o pino C
![Page 39: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/39.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
3 21
Movimento = 3
Mova o disco 1 do pino B para o pino C
![Page 40: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/40.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
Movimento = 4
Mova o disco 3 do pino A para o pino B
![Page 41: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/41.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
Movimento = 5
Mova o disco 1 do pino C para o pino A
![Page 42: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/42.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
32
1
Movimento = 6
Mova o disco 2 do pino C para o pino B
![Page 43: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/43.jpg)
A C B
Torre de Hanói• Se o valor fornecido para o programa for 3, então a sequência de chamadas
e as saídas geradas são:
321
PARABÉNS!Conseguiu mover os 3 discos com o mínimo de movimentos
Movimento = 7
M
Quantidade mínima de movimentos
Número dediscos
Mova o disco 1 do pino A para o pino B
![Page 44: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/44.jpg)
Torre de HanóiPara solucionar um Hanói de 3 discos, são necessários 7 movimentos
Para solucionar um Hanói de 4 discos, são necessários 15 movimentos
Para solucionar um Hanói de 5 discos, são necessários 31 movimentos
Para solucionar um Hanói de 6 discos, são necessários 63 movimentos
Para solucionar um Hanói de 7 discos, são necessários 127 movimentos
Para solucionar um Hanói de 15 discos, são necessários 32.767 movimentos
Para solucionar um Hanói de 64 discos, como diz a lenda, são necessários 18.446.744.073.709.551.615 movimentos.
![Page 45: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/45.jpg)
Tarefa• Torre de Hanói
Escrever um programa em C que calcula o movimento de n discos de acordo com as regras estabelecidas
![Page 46: MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014](https://reader038.vdocuments.pub/reader038/viewer/2022102923/552fc15f497959413d8e7462/html5/thumbnails/46.jpg)
Material Baseado em:
• Estrutura de Dados Usando C (Livro)
• Slides do Prof. Daniel M. Martin