Professor Luiz José Hoffmann Filho

Slides:



Advertisements
Apresentações semelhantes
Aquiles Burlamaqui AULA 09
Advertisements

Funções em C Prof. Fabiano Utiyama.
Técnicas de Programação II Revisão TP1 Parte2
Python: Recursão Claudio Esperança.
Programação em Java Prof. Maurício Braga
Recursividade Inhaúma Neves Ferraz
Programação em Java Prof. Maurício Braga
Marco Antonio Montebello Júnior
Aula 10 Algoritmos de Busca
Recursividade Prof. Rosana Palazon.
Programação MAC-1 Exemplo: copiar vector
Funções, Execução Condicional, Recursividade e Iteração
Recursividade e Iteração Factorial, Fibonacci e Maior Divisor Comum
Introdução aos Computadores e à Programação
Recursividade Prof. Alex F. V. Machado
Algoritmos e Programação Estruturada Conceitos básicos
Recursividade Inhaúma Neves Ferraz
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
INTRODUÇÃO À PROGRAMAÇÃO
Recorrências.
Linguagem C Funções.
Programação Dinámica Análise de algoritmos UNISUL
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
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
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
Programação II Estruturas de Dados Aula 02 - continuação
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.
Orientação a Objetos e Java Graduação em Ciência da Computação
Algoritmos e Estruturas de Dados I – Recursão
Estruturas de Dados Aula 14: Recursão 04/06/2014.
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Algoritmos e Estruturas de Dados I – Recursão
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:
Árvore Binária de Busca
Universidade do Vale do Rio dos Sinos - São Leopoldo -
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.
Introdução à Linguagem C
Aula 10 Algoritmos de Busca
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
R ECURSIVIDADE LPII Professora Lucélia. M ÉTODO R ECURSIVO Um método é considerado recursivo quando possui uma chamada para si próprio. Segundo Deitel,
Recursividade Profs. De Prog2 e Lab2.
INE Fundamentos de Matemática Discreta para a Computação
Alinhamento de Cadeias de DNA COMPARAÇÃO DE SEQÜÊNCIAS
Algoritmos e Programação MC102
Algoritmo e Estrutura de Dados I
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros.
Ciência da Computação 1 PROGRAMAÇÃO ESTRUTURADA II Profª. Noeli.
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.
Linguaguem de Programação II
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
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.
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
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Funções Recursivas.
INF1007: Programação Funções Recursivas
Fundamentos de Programação1
Transcrição da apresentação:

Professor Luiz José Hoffmann Filho ljhfilho@gmail.com Recursividade Professor Luiz José Hoffmann Filho ljhfilho@gmail.com 1

Tópicos Principais Recursão Funções Recursivas Definições recursivas Implementação Comportamento 2

Motivação Recursividade é uma idéia inteligente que desempenha um papel central na programação funcional e na ciência da computação em geral. Recursividade é o mecanismo de programação no qual uma definição de função ou de outro objeto refere-se ao próprio objeto sendo definido. Assim função recursiva é uma função que é definida em termos de si mesma. Recursividade é o mecanismo básico para repetições nas linguagens funcionais. São sinônimos: recursividade, recursão, recorrência. 4/39

Estratégia Estratégia para a definição recursiva de uma função: dividir o problema em problemas menores do mesmo tipo resolver os problemas menores (dividindo-os em problemas ainda menores, se necessário) combinar as soluções dos problemas menores para formar a solução final Ao dividir o problema sucessivamente em problemas menores eventualmente os casos simples são alcançados: não podem ser mais divididos suas soluções são definidas explicitamente 1 2 3 5/39

• Em uma definição recursiva um item é definido em termos Definições Recursivas • Em uma definição recursiva um item é definido em termos de si mesmo, ou seja, o item que está sendo definido aparece como parte da definição; • Em todas as funções recursivas existe: – Caso base (um ou mais) cujo resultado é imediatamente conhecido. – Passo recursivo em que se tenta resolver um sub-problema do problema inicial. 3

• Exemplo: o fatorial de um número Definições Recursivas • Exemplo: o fatorial de um número Caso BASE n! = 1, se n = 0  n× (n − 1)!, se n > 0 Passo Recursivo 4

• Exercício: forneça a definição recursiva para a operação Definições Recursivas • Exercício: forneça a definição recursiva para a operação de potenciação Caso BASE xn = 1, se n = 0  x * x(n-1), se n > 0 Passo Recursivo 5

• Definição: Funções Recursivas – Uma função recursiva é aquela que faz uma chamada para si mesma. Essa chamada pode ser: • direta: uma função A chama a ela própria • indireta: função A chama uma função B que, por sua vez, chama A /* Recursao direta */ void func_rec(int n) { ... func_rec(n-1); } 6

• Exemplo: função recursiva para cálculo de fatorial Funções Recursivas • Exemplo: função recursiva para cálculo de fatorial n! = 1, se n = 0  n * (n − 1)!, se n > 0 /* Função recursiva para cálculo do fatorial */ int fat (int n) { Caso BASE if (n==0) return 1; else return n*fat(n-1); Passo Recursivo } 7

• Exemplo: função recursiva para cálculo de potenciação Funções Recursivas • Exemplo: função recursiva para cálculo de potenciação xn = 1, se n = 0  x * x(n-1), se n > 0 /* Função recursiva para cálculo de potenciacao */ int pot (int x, int n) { Caso BASE if (n==0) return 1; else return x*pot(x,n-1); Passo Recursivo } 8

• Comportamento: Funções Recursivas – quando uma função é chamada recursivamente, cria-se um ambiente local para cada chamada – as variáveis locais de chamadas recursivas são independentes entre si, como se estivéssemos chamando funções diferentes 9

3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) - 2 f fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

1 2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

1 2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; f fat(0)n - r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

1 1 2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; f fat(0)n 1 r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

1 2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; 1 - f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

2 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 f fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

6 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { } 6 3 - f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

6 3 Funções Recursivas #include <stdio.h> int fat (int n); int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { int f; if (n==0) f=1; else f= n*fat(n-1); r 6 return f; main n 3 }

Funções Recursivas Exemplo: Série de fibonacci 19

• Exemplo: série de Fibonacci Funções Recursivas • Exemplo: série de Fibonacci /* Calculo da serie de Fibonacci */ int fib (int n) { if (n==0) return 0; else if (n==1) return 1; else return (fib(n-1) + fib(n-2)); } 20

Exercícios Crie a função recursiva para calcular o terminal de um número n, definido da seguinte maneira: A multiplicação de números naturais pode ser definida da segunte forma: 21

Exercícios Determine o que o seguinte procedimento recursivo computa. Escreva um procedimento não recursivo (ou iterativo) para para solucionar o mesmo problema. Funcao(n) { se n = 0 entao retorne 0 senao retorne n + Funcao (n-1) • 21

Exercícios Implemente um algoritmo para calcular o fatorial • 21

Exercícios - Desafio Elaborar um algoritmo iterativo para o Problema da Torre de Hanói. Elaborar um algoritmo recursivo para o Problema da Torre de Hanói. • 21