SlideShare uma empresa Scribd logo
1 de 17
Introdução à Programação
Aula Prática 5
Recursão
Monitoria 2013.2
Roteiro
• Recursão
-Definição
-Em C
-Elementos da Recursão
-Algoritmo
-Funcionamento das Funções
-Exemplo: Divisão de Inteiros
-Vantagens
-Desvantagens
• Dúvidas
• Exercícios
Recursão - Definição
• Recursão é uma instrução que tem o artifício de
chamar a si mesma até que se chegue a algum
resultado.
• A estrutura de recursão consiste em caso base e
hipótese de indução.
• A operação fatorial é um exemplo de recursão em
matemática:
n! = n x (n-1) x … x 1 = n.(n-1)!
0! = 1
Recursão – Em C
• Em C, recursões são funções que podem chamar a
si mesmas*, podendo repetir instruções para que se
chegue ao resultado esperado.
• Como na recursão comum, há um caso base e uma
hipótese de indução.
• Se não for bem definido o caso base, um programa
pode entrar em uma recursão infinita, e o programa
para sua execução.
*Ou chamar uma função que depois chame primeira.
Recursão – Em C
A função fatorial calcula o fatorial de
um dado número 'n'. Para isso, ele
multiplica n pelo fatorial de n – 1, pois
a hipótese de indução é que
“n! = n.(n – 1)!”. Se n for 0, o caso
base, a função retornará 1.
Veja que:
0! = 1 => 1! = 1.0! = 1 => 2! = 2.1! = 2
3! = 3.2! = 6
4! = 4.3! = 24
5! = 5.4! = 120
6! = 6.5! = 720
...
E assim por diante.
Exemplo:
int fat(int n) {
int res;
if(n > 0) {
res = n * fat(n – 1);
} else {
res = 1;
}
return res;
}
Recursão - Elementos da Recursão
• A estrutura básica da recursão é:
• Caso base:
- É a condição de parada da recursão.
- Pode haver mais de um.
- Ele não abre uma nova chamada da função.
• Hipótese de Indução (ou Caso Recursivo):
- É o conjunto de instruções que a função exerce
que incluem uma nova chamada da função.
- Obrigatoriamente, há uma nova chamada
recursiva.
- É nisso que consiste a ideia de recursão.
Recursão - Algoritmo
1. Receber um valor pra chamada.
2. Comparar entrada com o caso base.
3. Se for, o retorno será o valor definido para o caso.
4. Se não, aplicar a hipótese de indução, abrindo uma
nova chamada para a função recursiva.
5. Esperar o retorno da nova chamada recursiva para
definir o valor de retorno.
6. Retornar.
Recursão – Funcionamento das Funções
• Funções recursivas, como quaisquer funções, tem suas
próprias variáveis e parâmetros.
• A cada nova chamada recursiva, as variáveis são
recriadas, e são independentes de suas versões em
qualquer outra chamada da função.
• Portanto, cada chamada recursiva guarda seus
próprios valores nas variáveis, isto se chama Estado.
• As únicas variáveis que podem ser acessadas em
qualquer instância da recursão são as variáveis static.
Recursão – Divisão de Inteiros
• Caso base: não é possível subtrair.
- Não é possível subtrair sem extrapolar o conjunto
dos naturais.
- Ou seja: dividendo < divisor.
• Hipótese de Indução: subtrair os termos:
- dividendo >= divisor.
- Devo adicionar 1 à contagem, e então devo
somar isso à divisão do dividendo pelo divisor e o
divisor.
- (k >= a) => k/a = 1 + (k – a)/a.
- Perceba que a divisão de inteiros k/a chama,
recursivamente, a divisão de inteiros (k – a)/a.
Recursão – Divisão de Inteiros
• Exemplo:
int div(int dividendo, int divisor) {
int quociente;
if(dividendo < divisor) {
quociente = 0;
} else {
dividendo -= divisor;
quociente = 1 + div(dividendo, divisor);
}
return quociente;
}
Recursão – Divisão de Inteiros
• Exemplo:
int quoc = div(12, 5);
Recursão – Vantagens
• Há problemas que podem ser resolvidos de forma mais
simples, recursivamente.
• Soluções recursivas são, em geral, mais elegantes que
as soluções iterativas.
• Como C salva o Estado de execução de cada chamada
recursiva, não há necessidade de se preocupar com
salvar as variáveis antes de passar pra próxima
chamada, como se precisaria ser feito em muitos casos
iterativos.
Recursão – Desvantagens
• Recursões são lentas, pois precisam recriar variáveis e
parâmetros e reinicializar cada um.
• Em larga escala, podem consumir muita memória para
guardar todos os estados de cada chamada recursiva.
• Definir uma condição inválida de parada pode criar
uma recursão infinita. Sempre se assegure de que a
recursão atingirá o caso base.
Dúvidas?
Exercício 1
• Escreva um programa em C que lê do usuário uma
frase que vá até o ponto final '.', e então imprima ela
ao contrário.
• Obs.: O usuário pode entrar com um dígito por vez.
Ex:
Entrada:
Recursao e lindo.
Saída:
.odnil e oasruceR
Exercício 2
• Faça um programa que receba um número N e
calcule os ‘N’ termos da sequência de fibonacci e da
sequência de golomb:
Ex:
Entrada:
2
Saída:
0 1
1 2
Exercício 3
•Defina um procedimento recursivo para, dado um
número natural n na base decimal e uma outra base
(entre 2 e 9) imprimi-lo nesta base .
Ex:
Entrada (numero/base):
5 2
11 8
2013 5
Saída:
101
13
258

Mais conteúdo relacionado

Semelhante a AP5_2013_2.pptx

aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdfGabrielEduardo16342
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Aula 4 herança, sobrescrita de métodos, construtor
Aula 4   herança, sobrescrita de métodos, construtorAula 4   herança, sobrescrita de métodos, construtor
Aula 4 herança, sobrescrita de métodos, construtorRafael Pinheiro
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividadeMauricio Wieler
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsortFlávio Freitas
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...EUBrasilCloudFORUM .
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Robson Ferreira
 

Semelhante a AP5_2013_2.pptx (20)

Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Recursão
RecursãoRecursão
Recursão
 
Aula 4 herança, sobrescrita de métodos, construtor
Aula 4   herança, sobrescrita de métodos, construtorAula 4   herança, sobrescrita de métodos, construtor
Aula 4 herança, sobrescrita de métodos, construtor
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividade
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Aula 11
Aula 11Aula 11
Aula 11
 
Funções em C
Funções em CFunções em C
Funções em C
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsort
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 11 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5
 

Último

Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxDianaSheila2
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESEduardaReis50
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 

Último (20)

Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Atividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptxAtividade sobre os Pronomes Pessoais.pptx
Atividade sobre os Pronomes Pessoais.pptx
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕESCOMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
COMPETÊNCIA 4 NO ENEM: O TEXTO E SUAS AMARRACÕES
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 

AP5_2013_2.pptx

  • 1. Introdução à Programação Aula Prática 5 Recursão Monitoria 2013.2
  • 2. Roteiro • Recursão -Definição -Em C -Elementos da Recursão -Algoritmo -Funcionamento das Funções -Exemplo: Divisão de Inteiros -Vantagens -Desvantagens • Dúvidas • Exercícios
  • 3. Recursão - Definição • Recursão é uma instrução que tem o artifício de chamar a si mesma até que se chegue a algum resultado. • A estrutura de recursão consiste em caso base e hipótese de indução. • A operação fatorial é um exemplo de recursão em matemática: n! = n x (n-1) x … x 1 = n.(n-1)! 0! = 1
  • 4. Recursão – Em C • Em C, recursões são funções que podem chamar a si mesmas*, podendo repetir instruções para que se chegue ao resultado esperado. • Como na recursão comum, há um caso base e uma hipótese de indução. • Se não for bem definido o caso base, um programa pode entrar em uma recursão infinita, e o programa para sua execução. *Ou chamar uma função que depois chame primeira.
  • 5. Recursão – Em C A função fatorial calcula o fatorial de um dado número 'n'. Para isso, ele multiplica n pelo fatorial de n – 1, pois a hipótese de indução é que “n! = n.(n – 1)!”. Se n for 0, o caso base, a função retornará 1. Veja que: 0! = 1 => 1! = 1.0! = 1 => 2! = 2.1! = 2 3! = 3.2! = 6 4! = 4.3! = 24 5! = 5.4! = 120 6! = 6.5! = 720 ... E assim por diante. Exemplo: int fat(int n) { int res; if(n > 0) { res = n * fat(n – 1); } else { res = 1; } return res; }
  • 6. Recursão - Elementos da Recursão • A estrutura básica da recursão é: • Caso base: - É a condição de parada da recursão. - Pode haver mais de um. - Ele não abre uma nova chamada da função. • Hipótese de Indução (ou Caso Recursivo): - É o conjunto de instruções que a função exerce que incluem uma nova chamada da função. - Obrigatoriamente, há uma nova chamada recursiva. - É nisso que consiste a ideia de recursão.
  • 7. Recursão - Algoritmo 1. Receber um valor pra chamada. 2. Comparar entrada com o caso base. 3. Se for, o retorno será o valor definido para o caso. 4. Se não, aplicar a hipótese de indução, abrindo uma nova chamada para a função recursiva. 5. Esperar o retorno da nova chamada recursiva para definir o valor de retorno. 6. Retornar.
  • 8. Recursão – Funcionamento das Funções • Funções recursivas, como quaisquer funções, tem suas próprias variáveis e parâmetros. • A cada nova chamada recursiva, as variáveis são recriadas, e são independentes de suas versões em qualquer outra chamada da função. • Portanto, cada chamada recursiva guarda seus próprios valores nas variáveis, isto se chama Estado. • As únicas variáveis que podem ser acessadas em qualquer instância da recursão são as variáveis static.
  • 9. Recursão – Divisão de Inteiros • Caso base: não é possível subtrair. - Não é possível subtrair sem extrapolar o conjunto dos naturais. - Ou seja: dividendo < divisor. • Hipótese de Indução: subtrair os termos: - dividendo >= divisor. - Devo adicionar 1 à contagem, e então devo somar isso à divisão do dividendo pelo divisor e o divisor. - (k >= a) => k/a = 1 + (k – a)/a. - Perceba que a divisão de inteiros k/a chama, recursivamente, a divisão de inteiros (k – a)/a.
  • 10. Recursão – Divisão de Inteiros • Exemplo: int div(int dividendo, int divisor) { int quociente; if(dividendo < divisor) { quociente = 0; } else { dividendo -= divisor; quociente = 1 + div(dividendo, divisor); } return quociente; }
  • 11. Recursão – Divisão de Inteiros • Exemplo: int quoc = div(12, 5);
  • 12. Recursão – Vantagens • Há problemas que podem ser resolvidos de forma mais simples, recursivamente. • Soluções recursivas são, em geral, mais elegantes que as soluções iterativas. • Como C salva o Estado de execução de cada chamada recursiva, não há necessidade de se preocupar com salvar as variáveis antes de passar pra próxima chamada, como se precisaria ser feito em muitos casos iterativos.
  • 13. Recursão – Desvantagens • Recursões são lentas, pois precisam recriar variáveis e parâmetros e reinicializar cada um. • Em larga escala, podem consumir muita memória para guardar todos os estados de cada chamada recursiva. • Definir uma condição inválida de parada pode criar uma recursão infinita. Sempre se assegure de que a recursão atingirá o caso base.
  • 15. Exercício 1 • Escreva um programa em C que lê do usuário uma frase que vá até o ponto final '.', e então imprima ela ao contrário. • Obs.: O usuário pode entrar com um dígito por vez. Ex: Entrada: Recursao e lindo. Saída: .odnil e oasruceR
  • 16. Exercício 2 • Faça um programa que receba um número N e calcule os ‘N’ termos da sequência de fibonacci e da sequência de golomb: Ex: Entrada: 2 Saída: 0 1 1 2
  • 17. Exercício 3 •Defina um procedimento recursivo para, dado um número natural n na base decimal e uma outra base (entre 2 e 9) imprimi-lo nesta base . Ex: Entrada (numero/base): 5 2 11 8 2013 5 Saída: 101 13 258

Notas do Editor

  1. 4
  2. 5
  3. 6
  4. 10
  5. 11
  6. 17