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.

Slides:



Advertisements
Apresentações semelhantes
Recursividade Inhaúma Neves Ferraz
Advertisements

Um programa em C Bibliotecas Variáveis globais
Estruturas de Repetição
Recursividade Prof. Rosana Palazon.
TADS – Tipos Abstratos de Dados
Recursividade Prof. Alex F. V. Machado
Introdução à Computação - Jorge Macêdo
Recursividade Inhaúma Neves Ferraz
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
Introdução à Linguagem C
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Fundamentos de Programação 1
Linguagem de Programação
Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
CADEIA DE CARACTERES (Strings)
Tipos Abstratos de Dados
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
UNIDADE 6 - complemento Funções recursivas
PROGRAMAÇÃO I UNIDADE 4.
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.
Linguagem de Programação
Algoritmos e Estruturas de Dados I – Recursão
Algoritmos e Estruturas de Dados I – Recursão
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
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.
Introdução à Linguagem C
Prof. Alessandro Gonçalves
Aula 5 - Exercícios Prof. Leandro M. Almeida.
Revisão Luis Antonio Tavares
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo III Comandos de Controle.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Recursividade Profs. De Prog2 e Lab2.
Linguagem de Programação
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Algoritmo e Estrutura de Dados I
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Algoritmo e Programação
Profº Antonio Carlos Marcelino de Paula
Algoritmo e Estrutura de Dados I
Linguaguem de Programação II
Professor Luiz José Hoffmann Filho
Estruturas Homogêneas – Vetores e Matrizes
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
Aula Prática 6 Vetores e Matrizes Monitoria
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.
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.
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.
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.
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.
ALGORITMOS Profº Antonio Carlos Marcelino de Paula 1.
USP – ICMC – SSC SSC0300 2º Semestre 2015
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
Programação de Computadores I – Arquivos Profa. Mercedes Gonzales Márquez.
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.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Estruturas Homogêneas - Vetores
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Fundamentos de Programação1
Transcrição da apresentação:

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 Ferraz Bonetti LCR – Laboratório de Computação Reconfigurável Sala: ICMC ou Página da disciplina:

Recursão Definição de Recursão Exemplos de Recursão Estrutura da Recursão Vantagens e Desvantagens da Recursão Exercícios 2 Agenda:

Recursão em C Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Ex: cálculo do fatorial de um número: n! = n * (n - 1)! 3

Recursão em C A recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema Esta ferramenta pode ser utilizada sempre que for possível expressar a solução de um problema em função do próprio problema 4

Exemplo fatorial #include int fatorial (int n){ if (n == 0) /* condição de parada da recursão */ return 1; else if (n < 0) { printf ("Erro: fatorial de número negativo!\n"); exit(0); } return n * fatorial(n-1); } 5

Exemplo fatorial fatorial(5) => (5 ° 0) return 5 fatorial(4) => (4 ° 0) return 4 fatorial(3) => (3 ° 0) return 3 fatorial(2) => (2 ° 0) return 2 fatorial(1) => (1 ° 0) return 1 fatorial(0) => (0 == 0) <= return 1 <= return 1 1 (1) <= return 2 1 (2) <= return 3 2 (6) <= return 4 6 (24) <= return 5 24 (120) 120 6

Exemplo fatorial int main(void) { int n, fat=1; printf("Digite um numero inteiro:"); scanf("%d", &n); fat=fatorial(n); printf("\n\nO fatorial de %d eh: %d", n, fat); getch(); } 7

EX: SOMA N PRIMEIROS NÚMEROS INTEIROS Supondo N = 5; S(5) = = 15 -> S(5) = S(4) + 5 -> = 15 S(4) = = 10 -> S(4) = S(3) + 4 -> = 10 S(3) = = 6 -> S(3) = S(2) + 3 -> = 6 S(2) = 1+2 = 3 -> S(2) = S(1) + 2 -> = 3 S(1) = 1 = 1 -> S(1) = > solução trivial 8

Recursão Em procedimentos recursivos pode ocorrer um problema de terminação do programa, como um “looping interminável ou infinito”. Portanto, para determinar a terminação das repetições, deve-se: – Definir uma função que implica em uma condição de terminação (solução trivial), e – Provar que a função decresce a cada passo de repetição, permitindo que, eventualmente, esta solução trivial seja atingida. 9

ESTRUTURA DE UMA RECURSÃO Uma recursão obedece a uma estrutura que deve conter os seguintes elementos: função(par) – teste de término de recursão utilizando par se teste ok, retorna aqui – processamento aqui a função processa as informações em par – chamada recursiva em par’ par deve ser modificado de forma que a recursão chegue a um término 10

EX: SOMA N PRIMEIROS NÚMEROS INTEIROS main( ) { int n; scanf(“%d”, &n); printf(“%d”, soma(n)); } int soma(int n) { if (n == 1) return (1); else return (n + soma(n – 1)); } 11

EXEMPLO: PRINTD(INT) main( ) { int n; scanf(“%d”, &n); printf(“%d”, soma(n)); } int soma(int n) { if (n == 1) return (1); else return (n + soma(n – 1)); } 12

EXEMPLO: PRINTD(INT) printd(-1974) ==> (n putchar("-") - ==>printd(197) - ==> printd(19) - ==> printd(1) - (1 / 10 == 0) - putchar(1 + "0") -1 putchar(19%10 + "0") -19 putchar(197%10 + "0") -197 putchar(1974 %10 + "0")

Analisando Recursividade Vantagens X Desvantagens Um programa recursivo é mais elegante e menor que a sua versão iterativa, além de exibir com maior clareza o processo utilizado, desde que o problema ou os dados sejam naturalmente definidos através de recorrência. Por outro lado, um programa recursivo exige mais espaço de memória e é, na grande maioria dos casos, mais lento do que a versão iterativa. 14

Recursão na prática 1.Escreva uma função recursiva para calcular o valor de uma base x elevada a um expoente y. 2.Escrever uma função recursiva que retorna o tamanho de um string, length(char s[]) 3.Fazer uma função recursiva que conta o número de ocorrências de um determinado caracter, caract(char c, char s[]) 4.Escreva uma função recursiva que produza o reverso de um string, reverse(char s[]) 15

#include int expo (int x, int y) { if (y == 0) return 1; if (y == 1) return x; return x*expo(x,y-1); } int main(void) { int x, y, e; printf("Exponencial de x elevado a y\n\n"); printf("\nDigite o numero inteiro x:"); scanf("%d", &x); printf("\nDigite o numero inteiro y:"); scanf("%d", &y); if (y < 0) { printf("y tem que ser maior ou igual a zero!!"); getch(); } else { e=expo(x,y); printf("\n\nX elevado a y eh: %d", e); getch(); } } 16

#include int length(char s[]) { if (s[0] == '\0') return 0; return 1+ length(&s[1]); } int main(void) { char s[20]; int t; printf("Tamanho de string\n\n"); printf("\nDigite a string: "); scanf("%s", s); t = length(s); printf("\n\nO tamanho eh %d", t); getch(); } 17

/* conta quantas vezes um caractere ocorre em uma string*/ #include int carac(char c,char s[]) { if (s[0] == '\0') return 0; if (s[0]==c) return (1+carac(c,++s)); return carac(c,++s); } int main(void) { char s[30],c; int t; printf("Busca em string\n\n"); printf("\nDigite a string: "); gets(s); printf("\nDigite o caractere desejado: "); c=getchar(); t = carac(c,s); printf("\n\nEncontrei %d vezes", t); getch();} 18

/* imprime uma string em ordem reversa*/ #include void contrario(char s[]) { if (s[0] != '\0') { contrario(&s[1]); printf("%c",s[0]); } int main(void) { char s[30],c; int t; printf("Imprime reverso\n\n"); printf("\nDigite a string: "); gets(s); contrario(s); getch(); } 19

Exercício (próxima aula) – Submeter no STOA 20

Informações sobre a disciplina USP - Universidade de São Paulo - São Carlos, SP ICMC - Instituto de Ciências Matemáticas e de Computação SSC - Departamento de Sistemas de Computação Prof. Dr. Daniel Rodrigo Ferraz Bonetti Web institucional: Página do Grupo de Pesquisa: ou Disciplina de Linguagem de Programação e Aplicações SSC