Introdução à Computação II Unesp Rio Claro 2012Prof. Rafael Oliveira

Documentos relacionados
Recursão. Prof. Cristiano André da Costa. [Versão de Março de 2000] Definição

Algoritmos e Estruturas de Dados I

Processamento da Informação

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02

Programação I Aula 15 Definições recursivas

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Capítulo VII : A Recorrência

Programação Estruturada

Recursão David Déharbe

Ciência da Computação

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Linguagem Computacional. Estruturas de Controle: Estruturas de Decisão ou de Seleção. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Introdução à Programação Aula 16 Mais exemplos de recursão

Programando o Computador com PascaL: um ambiente para Auto-Aprendizagem.

Aula Anterior. Decomposição algorítmica (continuação)

Curso Técnico de Mecatrônica 4º Ano 2º Bimestre Introdução à Lógica de Programação

Recursividade. Objetivos do módulo. O que é recursividade

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Aulas Anteriores. Detalhes da linguagem de programação

MC102 Aula 27 Recursão II

Introdução à Programação / Programação I

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Análise de Complexidade para algoritmos iterativos e recursivos

tipoveiculo = (bicicleta, motociclo, motorizada, automovel, autocomreb, camioneta, autocarro, camiao, reboque); veiculo : tipoveiculo;

Recursão. Introdução à Ciência da Computação II(2009/2010) Rosane Minghim. Apoio na confecção: Rogério Eduardo Garcia Danilo Medeiros Eler

Aula prática 5. Funções Recursivas

Modularidade. Objetivos: Introduzir noções básicas de modularidade. Funções e procedimentos

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Aula 06: Análise matemática de algoritmos recursivos

Universidade Estadual de Maringá- UEM Centro de Tecnologia - CTC Departamento de Informática - DIN Fundamentos da Computação.

Análise e Desenvolvimento de Algoritmos (2006/2007)

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira

Python: Recursão. Claudio Esperança

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Notas sobre Definições Recursivas

Exemplos de programação em PASCAL

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Algoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO

Recursão. Definição. Características. Recursividade 31/08/2010

UNIVERSIDADE DE SÃO PAULO - ICMC Departamento de Ciências da Computação SCC-203 Algoritmos e Estruturas de Dados 2-2 Sem /2012 Profa.

Recursividade Alguns problemas são definidos com base nos mesmos, ou seja, podem ser descritos por instâncias do próprio problema.

Deve-se mover um disco por vez; Nunca se deve colocar um disco sobre o outro menor do que ele.

Estruturas de Dados Aula 14: Recursão

Estruturas de Dados Aula 14: Recursão 19/05/2011

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

UNIVERSIDADE ESTADUAL PAULISTA Julio de Mesquita Filho" FACULDADE DE ENGENHARIA

Capítulo V : A Linguagem Pascal Um Tipo Estruturado de Dados: o array 18. Para limite de n até 2 (* passagens de 1 até (n-1) *)

Introdução a Algoritmos Parte 08

p A modularização consiste num método utilizado para facilitar a construção de grandes programas;

SCC Capítulo 2 Recursão

UNIVERSIDADE FEDERAL DO PARÁ BIBLIOTECA DE OBJETOS MATEMÁTICOS

SCC0214 Projeto de Algoritmos

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Aulas 5 e 6 / 28 e 30 de março

Introdução a Computação

FACCAT Sistemas de Informação. Estruturas de Dados

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Capítulo VI : Subprogramas

Modularização. Prof. Antonio Almeida de Barros Junior

Refinamentos sucessivos

Aula 21 - Algoritmos e Funções Recursivas

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

Elementos básicos das linguagens de programação

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Algoritmos e Estruturas de Dados I Linguagem C

MA12 - Unidade 3. Paulo Cezar Pinto Carvalho PROFMAT - SBM

Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente.

ao paradigma imperativo

Aula 1. Teoria da Computação III

Teste de P1 12 de Dezembro 2001

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

MA12 - Unidade 3. Paulo Cezar Pinto Carvalho. 31 de Janeiro de 2014 PROFMAT - SBM

Complexidade de Algoritmos

INTRODUÇÃO A PROGRAMAÇÃO

Linguagens de Programação Aula 11

Programação estruturada no Fortran 90-2

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1

Subprogramação. Subprogramação. Subprogramação. A subprogramação é uma ferramenta que contribui com a tarefa de programar:

Linguagem de programação: Pascal

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Lógica de Programação I. Gilson de Souza Carvalho

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Estruturas de Controle

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

SCC0601 Projeto de Algoritmos. Recursão

2.2.5 EXPRESSÕES - Regras para o cálculo de valores

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

LISTA DE EXERCÍCIOS MÊS 04

Linguagem de Descrição de algoritmos

Lógica de Programação

Lista de Exercício 4 Algoritmo e Programação (Solução) 26/09/2018. Resolver usando estrutura de repetição (enquanto).

Recursividade. Recursividade

Transcrição:

Recursão

A recursão é bastante usada na matemática para definir funções, usando elas mesmas nas suas próprias definições. Por exemplo o cálculo de um fatorial, pode ser representada em forma de recursão da seguinte forma: n!=0 se n = 0 n!=n*(n-1)! se n > 0

Usando a definição acima, o fatorial de um número podemos calcular multiplicando o número pelo fatorial do número inteiro anterior, e por sua vez o fatorial deste número podemos calcular multiplicando ele pelo fatorial de seu antecessor, e assim sucessivamente até chegar a 0, onde o fatorial é igual a 1. Nesse momento acaba a recursão

Existem muitas funções ou procedimentos que podemos definir em forma simples e compacta usando a recursão. Vejamos como podemos usar a recursão em Pascal para calcular o fatorial de um número. Vamos definir a função fatorial(n) que recebe como parâmetro um número inteiro n e retorna o fatorial do número.

function fatorial(n:integer):integer; begin if(n=0) then fatorial:=1 else fatorial:=n*fatorial(n-1); end;

Para testar a função vamos escrever o programa que chama a função fatorial

Program TestaFatorial; Var n, f: integer; function fatorial(n:integer):integer; begin if(n=0) then fatorial:=1 else fatorial:=n*fatorial(n-1); end; Begin writeln('entre com um nmero inteiro'); Readln(n); f:=fatorial(n); writeln('o fatorial de ',n,' eh ',f); End.

Vejamos a aplicação da recursão em um outro problema mais interessante.

Torre de Hanoi As Torres de Hanói são um quebra-cabeca muito antigo e conhecido. Esse quebra-vabeça consiste de um conjunto de N discos de tamanhos diferentes e três pinos verticais, nos quais os discos podem ser encaixados.

Cada pino pode conter uma pilha com qualquer número de discos, desde que cada disco não seja colocado acima de outro disco de menor tamanho. A configuração inicial consiste de todos os discos no pino 1. O objetivo é mover todos os discos para um dos outros discos, sempre obedecendo à restrição de não colocar um disco sobre outro menor.

Tarefa Escrever um programa que determine quantos movimentos de trocar um disco de um pino para outro serão necessários para levar todos os disco do pino 1 (origem) para o pino 3 (destino). Como entrada o programa recebe o número de discos.

Este problema vamos resolver analisando varias situações da seguinte forma: Primeiro vamos analisar a situação mais simples: o que fazemos se temos apenas um disco?. A resposta é levar o disco do origem ao destino, neste caso o número de movimentos é 1.

Agora vamos analisar a situação em que temos 2 discos (N=2) no origem. Neste caso, levamos primeiro o disco mais leve ao pino temporario (pino 2), logo levamos o disco mais pesado ao destino e finalmente levamos o disco menor do temporario ao destino. Se podemos levar os dois disco ao destino, também poderiamos levar os dois discos ao pino temporario (seguindo a seguinte sequência: disco menor ao destino, disco maior ao temporario, disco menor ao temporario). Agora imagina que temos 3 discos no origem. O que podemos fazer é levar os dois discos menores ao temporario (isso ja sabemos fazer), logo levar o disco mais pesado ao pino destino e finalmente os dois discos menores levar para o pino destino usando o pino origem.

O que podemos fazer é levar os dois discos menores ao temporario (isso ja sabemos fazer), logo levar o disco mais pesado ao pino destino e finalmente os dois discos menores levar para o pino destino usando o pino origem. Em forma geral se temos, N discos, levamos os N-1 discos menores ao pino temporario, o disco maior levamos ao destino e depois levamos os N-1 discos ao destinos. Portanto o algoritmo seria:

procedimento Hanoi(N, Orig, Dest, Temp, contador) se N = 1 então mover o menor disco do pino Orig para o pino Dest; acrecentar o contador; senão Hanoi(N-1, Orig, Temp, Dest, contador); mover o N-ésimo menor disco do pino Orig para o pino Dest; acrecentar o contador; Hanoi(N-1, Temp, Dest, Orig, contador); fim-se fim

Em cada movemento vamos acrecentar o valor de um contador para determinar o numero de movimentos. Para que o contador possa ser alterado quando retornar a função, valor utilizar a ideia de passagem de parametro por referencia, o que foi aprendido na aula anterior. Vejamos como seria o programa:

Program testahanoi; Var n,contador:integer; Procedure Hanoi(n,origem,dest, temp:integer; var contador:integer); Begin if(n=1) then begin contador:=contador+1; end else begin Hanoi(n-1, origem, temp, dest,contador); contador:=contador+1; Hanoi(n-1, temp, dest, origem,contador); end; End; Begin writeln('entre com o numero de discos'); readln(n); contador:=0; Hanoi(n,1,2,3,contador); writeln('o numero de movimentos eh: ',contador); End.

Faça um programa principal para testar o problema das torres da Hannoi

Faça um programa principal para testar o problema das torres da Hannoi Faça os exercícios de recursão da Lista Complementar 4