Recursão Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Exemplo Cálculo do fatorial de um número:

Slides:



Advertisements
Apresentações semelhantes
Aquiles Burlamaqui AULA 09
Advertisements

Python: Recursão Claudio Esperança.
Recursividade Inhaúma Neves Ferraz
Diagrama explicativo de Recursividade
Estruturas de Repetição
Marco Antonio Montebello Júnior
Recursividade Função recursiva é aquela que chama a si própria.
Programação para Geociências
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Recursividade Prof. Rosana Palazon.
Aula Teste INFNET terça-feira, 11 de janeiro de 2011
Funções, Execução Condicional, Recursividade e Iteração
Exemplos de recursividade no mundo
Recursividade Prof. Alex F. V. Machado
PROCEDIMENTOS COM RECURSIVIDADE
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Recursividade Inhaúma Neves Ferraz
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Automato de Pilha.
Recursividade Conceitos e Aplicações.
THOBER CORADI DETOFENO, MSC. Aula 07
Universidade Federal do Espírito Santo
INF 1771 – Inteligência Artificial
História da Torre de Hanoi
< declaração de variáveis > ( estrutura de dados )
Introdução à Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
PROGRESSÕES GEOMÉTRICAS
Algoritmos Recursivos Klauko Mota. Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito.
Recursividade Programação II.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
UNIDADE 6 - complemento Funções recursivas
Algoritmos 1º Semestre Materia: Informática Profº: Cristiano.
Estruturas de Dados Módulo 3 – Controle de Fluxo
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Recursão.
Indução Matemática Recursão
Exercício.
Algoritmos e Estruturas de Dados I – Recursão
Estruturas de Dados Aula 14: Recursão 04/06/2014.
Linguagem de Programação JAVA
Algoritmos e Estruturas de Dados I – Recursão
LEMA 1 Utilização de material concreto no Ensino de Matemática
Universidade do Vale do Rio dos Sinos - São Leopoldo -
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
BCC 101 – Matemática Discreta I
PROGRESSÕES GEOMÉTRICAS
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Torre de  Hanói.
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
Recursividade Bruno Silva.
Como analisar um algoritmo
TORRE DE HANÓI Existem várias lendas a respeito da origem do jogo, a mais conhecida diz respeito a um templo cosmopolita holandês, situado no centro do.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Recursividade Profs. De Prog2 e Lab2.
Algoritmos e Estruturas de Dados I – Recursão
Algoritmos e Programação MC102
Elaine Teixeira de Oliveira
Recursividade Aula I – ALG II CPAN – UFMS. Recursividade A recursão é uma técnica pela qual uma rotina estruturada faz chamadas a ela mesma, com o objetivo.
Algoritmo e Estrutura de Dados I
27/28 Abril de 2004Recursividade e Iteração1 Pedro Barahona DI/FCT/UNL Abril 2004.
Professor Luiz José Hoffmann Filho
Estrutura de Dados Aula 3 - Listas
A Torre de Hanói.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PROGRESSÕES GEOMÉTRICAS Falamos de Progressões Aritméticas onde, após o 1ºtermo (a 1 ), todos os termos são obtidos somando-se a razão (r). Uma “Progressão.
Aula Prática 5 Recursão Monitoria  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim.
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014

Recursão Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Exemplo Cálculo do fatorial de um número: 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0

Fatorial 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 0! = 1 1! = 1 * 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1 Função Iterativa Função Iterativa

Fatorial 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 0! = 1 1! = 1 * 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4!

Fatorial 1 5! = 5 * 4! 2 4! = 4 * 3! 3 3! = 3 * 2! 4 2! = 2 * 1! 5 1! = 1 * 0! 6 0! = 1 6’ 0! = 1 5’ 1! = 1 * 0! = 1 * 1 = 1 4’ 2! = 2 * 1! = 2 * 1 = 2 3’ 3! = 3 * 2! = 3 * 2 = 6 2’ 4! = 4 * 3! = 4 * 6 = 24 1’ 5! = 5 * 4! = 5 * 24 = 120

Fatorial 120 1 5! = 5 * 4! 2 4! = 4 * 3! 3 3! = 3 * 2! 4 2! = 2 * 1! 5 1! = 1 * 0! 6 0! = 1

Fatorial Função Iterativa 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! Função Recursiva

Recursão e a Pilha de Execução (stack) Supõe que façamos int x = fatorial(4); Função Recursiva X

Recursão e a Pilha de Execução (stack) fatorial(4) n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) fatorial(3) n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) fatorial(3) fatorial(2) n 2 Retorno n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) n fatorial(3) 1 Retorno fatorial(2) n fatorial(1) 2 Retorno n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) n fatorial(4) Retorno n fatorial(3) 1 Retorno fatorial(2) n 2 fatorial(1) Retorno fatorial(0) n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) Retorno 1 n fatorial(3) 1 Retorno fatorial(2) n 2 fatorial(1) Retorno n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) fatorial(3) Retorno 1 fatorial(2) n 2 Retorno n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) fatorial(3) Retorno 2 n 3 Retorno n 4 Retorno X

Recursão e a Pilha de Execução (stack) fatorial(4) Retorno 6 n 4 Retorno X

Recursão e a Pilha de Execução (stack) Supõe que façamos int x = fatorial(4); Função Recursiva Retorno 24 X

Recursão e a Pilha de Execução (stack) Supõe que façamos int x = fatorial(4); Função Recursiva X 24

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

Elementos de uma função recursiva Exemplo: Condição de Parada

Elementos de uma função recursiva Exemplo: Chamada recursiva a uma instância menor

Elementos de uma função recursiva Exemplo: Processamento de apoio

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)

Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira:

Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira: Exercício 01 – Faça uma função recursiva para calcular o número de Fibonacci. Função Recursiva

Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira: Exercício 01 Faça um programa para imprimir a sequência de Fibonacci. Função Recursiva

Sequência de Fibonacci

Processamento de apoio? Exercício 2 O que faz o programa abaixo? Justifique!  Processamento de apoio?

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.

Torre de Hanói Estado inicial: Objetivo: Restrição: 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

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: A C B 1 2 3

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: A C B 1 3 2

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: A C B 1 3 2

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: A C B 1 2 3 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?

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: A C B 1 2 3

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: A C B 2 3 1 Movimento = 1 Mova o disco 1 do pino A para o pino 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: A C B 3 2 1 Movimento = 2 Mova o disco 2 do pino A para o pino C

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: A C B 1 3 2 Movimento = 3 Mova o disco 1 do pino B para o pino C

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: A C B 1 3 2 Movimento = 4 Mova o disco 3 do pino A para o pino 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: A C B 3 1 2 Movimento = 5 Mova o disco 1 do pino C para o pino A

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: A C B 2 3 1 Movimento = 6 Mova o disco 2 do pino C para o pino B

Conseguiu mover os 3 discos com o mínimo de movimentos 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: Quantidade mínima de movimentos A C B 1 2 M = 𝟐 𝒏 −𝟏 3 Número de discos Movimento = 7 PARABÉNS! Conseguiu mover os 3 discos com o mínimo de movimentos Mova o disco 1 do pino A para o pino B

Torre de Hanói Para 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.

Tarefa Torre de Hanói Escrever um programa em C que calcula o movimento de n discos de acordo com as regras estabelecidas

Material Baseado em: Estrutura de Dados Usando C (Livro) Slides do Prof. Daniel M. Martin