Recursividade Bruno Silva.

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Recursividade Inhaúma Neves Ferraz
Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
V – Geração de código Chamada de funções Organização de memória Passagem de parâmetros Representação de código intermédio Bibliografia aconselhada: –Aho,
Arquitetura e organização de computadores
Recursividade Prof. Rosana Palazon.
Exemplos de recursividade no mundo
Recursividade Prof. Alex F. V. Machado
Algoritmos e Estrutura de Dados I
Arquitetura de Sistemas Operacionais
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
CISC e RISC.
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Automato de Pilha.
Pesquisa em Memória Primária
Recursividade Conceitos e Aplicações.
Políticas Curso de aprofundamento em linguagem C.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Programação Orientada a Objetos
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Sistemas Operacionais I
Insertion Sort.
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
JAVA: Conceitos Iniciais
Introdução a Computação e Cálculo Numérico
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Marco Antonio Montebello Júnior
Algoritmos Recursivos Klauko Mota. Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Recursão.
Paradigmas de Projetos de Algoritmos
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Recursão
Algoritmos e Estruturas de Dados I – Recursão
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/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:
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Capítulo VIII Ambientes de Execução
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Algoritmos e Estruturas de Dados I – Modularização
Sistemas Operacionais
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
Registradores.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Capítulo 4: Processos.
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.
Ciência da Computação 1 PROGRAMAÇÃO ESTRUTURADA II Profª. Noeli.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Sistemas Operacionais IV – Gerenciamento de E/S
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
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.
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Recursividade Bruno Silva

Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito poderoso Define conjuntos infinitos com comandos finitos Vantagens Redução do tamanho do código fonte Permite descrever algoritmos de forma mais clara e concisa Desvantagens Redução do desempenho de execução devido ao tempo para gerenciamento de chamadas Dificuldades na depuração de programas recursivos, especialmente se a recursão for muito profunda

Objetos e Procedimentos Recursivos Um objeto é dito recursivo se consiste parcialmente em si mesmo ou é definido em termos de si mesmo. Procedimentos recursivos podem ser processadas por procedimentos não recursivos simulando a recursão.

Eventos que ocorrem no uso de Procedimentos Na chamada do procedimento · Passagem dos argumentos · Alocação e inicialização das variáveis locais · Transferência do controle para a função (endereço de retorno)   No retorno do procedimento · Recuperação do endereço de retorno · Liberação da área de dados · Desvio para o endereço de retorno

Implementação de procedimentos recursivos Procedimentos recursivos só podem ser implementados em alto nível de abstração. As máquinas não executam procedimentos recursivos. Cabe ao “software” simular procedimentos recursivos.

Implementação da Recursividade Usa-se uma pilha para armazenar os dados usados em cada chamada de um procedimento / função que não terminou Todos os dados não globais são armazenados na pilha, informando o resultado corrente Quando uma ativação anterior prossegue, os dados da pilha são recuperados

Simulação de Procedimentos Recursivos A simulação de recursão utilizará uma pilha com os seguintes atributos gravados: · Parâmetros · Variáveis · Valor da função (se for o caso) · Endereço de retorno

Exemplo – Função Fatorial Definição de uma Função Fatorial Não Recursiva: N! = 1, para N=0; N! = 1 x 2 x 3 x ... x N, para N>=1; Recursiva: N! = N x (N – 1), para N>=1;

Implementação de Fatorial Caso iterativo int factorial( int N ) { int product = 1; for ( int j=1; j<=N; j++ ) { product = product * j; } return product;

Implementação de Fatorial Caso Recursivo /** calcula o fatorial de N. @param n o numero que desejamos calcular o fatorial @return n! – fatorial de n. */ int fatorial(int n) { // Base Case: if (n <= 1) { return 1; } // Recursive Case: // If n > 1 then n! = n * (n-1)! else { return n * fatorial (n-1);

Problema com terminação de Procedimentos Recursivos Procedimentos recursivos introduzem a possibilidade de iterações que podem não terminar: existe a necessidade de considerar o problema de terminação. É fundamental que a chamada recursiva a um procedimento P esteja sujeita a uma condição A, a qual se torna satisfeita em algum momento da computação. Ex.: Se não existisse a condição n=0, quando o procedimento terminaria? Condição de terminação Permite que o procedimento deixe de ser executado O procedimento deve ter pelo menos um caso básico para cada caso recursivo, o que significa a finalização do procedimento

Outro Exemplo - Busca em uma Lista Linear Ordenada Pode-se realizar a busca em um elemento de duas formas: Busca Seqüencial Busca Binária Busca Seqüencial: elementos são pesquisados de acordo com o índice Pior caso: o elemento está no último índice da lista.

Busca Seqüencial Procedure Busca_Sequencial(L: TipoLista; x: TipoItem); Var i: integer; Begin i:=1; while ( L.Item[i]) <> x and i<=L.Ultimo – 1 do i:= i+1; if L.Item[i] = x then Writeln (‘Elemento Encontrado’); else Writeln (‘Elemento Não Encontrado’); End; COMO EXERCICIO ESCREVA ESSE ALGORITMO EM JAVA. E ME MANDE ATÉ O DIA 04/06

Busca Seqüencial A C E H L M P R T Z Procurar por R -8 Comparações! Se eu estivesse procurando o item Z, o número de comparações seria a quantidade de elementos no vetor O ideal seria dividir o vetor pela metade para então procurar (Busca Binária)

Busca Binária Divide seu vetor em duas metades Três condições Se o item for igual ao item que está na metade do vetor, o item foi encontrado Se for menor, procure na primeira metade Se for maior procure na segunda metade

Busca Binária A C E H L M P R T Z Procurar por R I F I F X X 1 2 3 4 5 6 7 8 9 10 A C E H L M P R T Z I F I F X X -2 Comparações! Casos piores: quando os itens estiverem no início do vetor. Nesse caso, seria melhor utilizar busca seqüencial. Mas como saber quando o ítem está no início do vetor?

Busca Binária Procedure Busca_Binária(L: TipoLista; x: TipoItem; Inicio, Fim: integer); Var meio: integer; Begin meio := (inicio + fim) div 2; If fim < inicio then Writeln (‘Elemento Não Enontrado’) Else If (L.Item[meio]) = x then Writeln (‘Elemento está na posição ’ + meio) Else If L.Item[meio] < x then begin inicio := meio +1; Busca_Binaria (L, x, inicio, fim); end else fim := meio - 1; end; End; COMO EXERCICIO ESCREVA ESSE ALGORITMO EM JAVA. E ME MANDE ATÉ O DIA 04/06