SlideShare uma empresa Scribd logo
1 de 17
ANHANGUERA – 2016.1
ALGORITMOS E ESTRUTURA DE DADOS
AULA 04 – RECURSÃO
Prof. Thomás da Costa
thomascosta@aedu.com
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
RECURSÃO
RECURSÃO
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
O que é:
É quando uma função, invoca a si mesma para resolver um problema em uma
instância menor.
RECURSÃO
Recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Mais detalhes:
- É quando uma função invoca a si mesmo.
- As chamadas devem possuir um fim.
- O programa pode ficar em um loop infinito.
- Dependendo da sua forma de utilização, pode ser lento.
- Existe uma pilha de execução.
- Simplifica algumas lógicas de programação.
- Programas recursivos são complexos.
- Possuem grande semelhança com instruções de laços.
- Muito cuidado: existe um limite para uma função chamar a si próprio.
- Esse limite é definido por cada compilador e linguagem.
Vamos ver um exemplo !!!
RECURSÃO
Recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplo de Fatorial:
No nosso exemplo vamos utilizar fatorial !!!
O que é fatorial?
É o produto de todos os seus antecessores, incluindo si próprio e excluindo o zero
Exemplo: 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
FATORIAL DE 6 É 720 !!!
RECURSÃO
Recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
using namespace std;
int calcular_fatorial(int valor);
int main()
{
cout << "Valor do fatorial:" << calcular_fatorial(6);
}
int calcular_fatorial(int valor)
{
if (valor == 0)
return 1;
else
{
valor = (valor * calcular_fatorial(valor - 1));
cout << valor << endl;
return valor;
}
}
Chamada recursiva
Vamos ver o programa
passo-a-passo, analisando a
pilha de execução
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
...
int calcular_fatorial(int valor)
{
if (valor == 0)
return 1;
else
{
valor = (valor * calcular_fatorial(valor - 1));
cout << valor << endl;
return valor;
}
}
calcular_fatorial(6) -> valor = (6 * calcular_fatorial(5));
calcular_fatorial(5) -> valor = (5 * calcular_fatorial(4));
calcular_fatorial(4) -> valor = (4 * calcular_fatorial(3));
calcular_fatorial(3) -> valor = (3 * calcular_fatorial(2));
calcular_fatorial(2) -> valor = (2 * calcular_fatorial(1));
calcular_fatorial(1) -> valor = (1 * calcular_fatorial(0));
calcular_fatorial(0) -> return 1;
Pilha de execução
Fim da recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
...
int calcular_fatorial(int valor)
{
if (valor == 0)
return 1;
else
{
valor = (valor * calcular_fatorial(valor - 1));
cout << valor << endl;
return valor;
}
}
calcular_fatorial(6) -> valor = (6 * 5 * 4 * 3 * 2 * 1 * 1);
calcular_fatorial(5) -> valor = (5 * 4 * 3 * 2 * 1 * 1);
calcular_fatorial(4) -> valor = (4 * 3 * 2 * 1 * 1);
calcular_fatorial(3) -> valor = (3 * 2 * 1 * 1);
calcular_fatorial(2) -> valor = (2 * 1 * 1);
calcular_fatorial(1) -> valor = (1 * 1);
calcular_fatorial(0) -> return 1;
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplo de Potenciação:
No próximo exemplo, vamos ver como criar um programa de potenciação.
O que é potenciação?
É o produto de um número por ele mesmo, em uma quantidade de vezes definida.
Exemplo: 5³ = 5 * 5 * 5 = 125
POTÊNCIA DE 5 É 125 !!!
RECURSÃO
Recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
using namespace std;
int potencia(int base, int expoente);
int main()
{
int base = 5;
int expoente = 3;
cout << "Potencia:" << potencia(base, expoente);
}
int potencia(int base, int expoente)
{
if (expoente == 0)
return 1;
else
{
int valor = base * potencia(base, expoente - 1);
cout << valor << endl;
return valor;
}
}
Chamada recursiva
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplos:
• Analisamos alguns exemplos estudados em Programação Estruturada II.
• Vamos praticar um pouco mais.
• Vamos começar !!!
RECURSÃO
Recursividade
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
RECURSÃO
Exercícios
Encontrar o valor máximo de um elemento de um vetor
com N posições.
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
using namespace std;
int maximo_vetor(int v[], int n);
int main()
{
int vetor[10] = { 2, 1, 10, 6, 1, 9, 1, 1, 0, 3 };
cout << maximo_vetor(vetor, 10);
}
int maximo_vetor(int v[], int n)
{
if (n == 1)
return v[0];
else
{
int x;
x = maximo_vetor(v, n-1);
if (x > v[n-1])
return x;
else
return v[n-1];
}
}
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
RECURSÃO
Exercícios
Efetuar a soma de um vetor utilizando recursão.
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream>
using namespace std;
int soma(int v[], int n);
int main()
{
int soma_vetor[5] = { 8, 0, 1, 3, 5};
cout << soma(soma_vetor, 5);
}
int soma(int v[], int n)
{
if (n == 0)
return 0;
else
{
int s = soma(v, n-1);
if (v[n-1] > 0)
s += v[n-1];
return s;
}
}
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
- É quando uma função invoca a si mesmo.
- As chamadas devem possuir um fim.
- O programa pode ficar em um loop infinito.
- Dependendo da sua forma de utilização, pode ser lento.
- Existe uma pilha de execução.
- Simplifica algumas lógicas de programação.
- Programas recursivos são complexos.
- Possuem grande semelhança com instruções de laços.
- Muito cuidado: existe um limite para uma função chamar a si próprio.
RECURSÃO
Resumo
Obrigado !!!
ANHANGUERA – 2016.1

Mais conteúdo relacionado

Mais procurados

4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funçõesFellyph Cintra
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalEmanuel Gonçalves
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01thomasdacosta
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
Exercicios sequenciais
Exercicios sequenciaisExercicios sequenciais
Exercicios sequenciaisMirlem Pereira
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_javaMirlem Pereira
 
LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2thomasdacosta
 
Programação Estruturada 2 - Aula 06
Programação Estruturada 2 - Aula 06Programação Estruturada 2 - Aula 06
Programação Estruturada 2 - Aula 06thomasdacosta
 

Mais procurados (20)

4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções4º Aula do Grupo de estudos sobre funções
4º Aula do Grupo de estudos sobre funções
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01Exercícios da Aula de LAB 01
Exercícios da Aula de LAB 01
 
Ling c
Ling cLing c
Ling c
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Exercicios sequenciais
Exercicios sequenciaisExercicios sequenciais
Exercicios sequenciais
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
 
Linguagem C 07 Registros
Linguagem C 07 RegistrosLinguagem C 07 Registros
Linguagem C 07 Registros
 
LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2LAB 01 - Programação Estruturada 2
LAB 01 - Programação Estruturada 2
 
Estruturas
EstruturasEstruturas
Estruturas
 
Programação Estruturada 2 - Aula 06
Programação Estruturada 2 - Aula 06Programação Estruturada 2 - Aula 06
Programação Estruturada 2 - Aula 06
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 

Destaque

Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02thomasdacosta
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Programação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código FonteProgramação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código Fontethomasdacosta
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod JavaSergio Silva
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08thomasdacosta
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
Estrutura de Dados - Aula 07
Estrutura de Dados - Aula 07Estrutura de Dados - Aula 07
Estrutura de Dados - Aula 07thomasdacosta
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividadeAnielli Lemes
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02thomasdacosta
 
MC – Aula 04 – Unidade central de processamento e Memória
MC – Aula 04 – Unidade central de processamento e MemóriaMC – Aula 04 – Unidade central de processamento e Memória
MC – Aula 04 – Unidade central de processamento e MemóriaFelipe J. R. Vieira
 
Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03thomasdacosta
 

Destaque (16)

Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Programação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código FonteProgramação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código Fonte
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Estrutura de Dados - Aula 07
Estrutura de Dados - Aula 07Estrutura de Dados - Aula 07
Estrutura de Dados - Aula 07
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
 
MC – Aula 04 – Unidade central de processamento e Memória
MC – Aula 04 – Unidade central de processamento e MemóriaMC – Aula 04 – Unidade central de processamento e Memória
MC – Aula 04 – Unidade central de processamento e Memória
 
Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 

Semelhante a Algoritmos e Estrutura de Dados - Aula 04

Semelhante a Algoritmos e Estrutura de Dados - Aula 04 (20)

Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Aula1
Aula1Aula1
Aula1
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-C
 
Tdc2010
Tdc2010Tdc2010
Tdc2010
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Programação funcional no dia a dia
Programação funcional no dia a diaProgramação funcional no dia a dia
Programação funcional no dia a dia
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 

Mais de thomasdacosta

Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produçãothomasdacosta
 
Programação de Sistemas Distribuídos - Aula 01
Programação de Sistemas Distribuídos - Aula 01Programação de Sistemas Distribuídos - Aula 01
Programação de Sistemas Distribuídos - Aula 01thomasdacosta
 
Organização de Computadores - Aula 02
Organização de Computadores - Aula 02Organização de Computadores - Aula 02
Organização de Computadores - Aula 02thomasdacosta
 
Organização de Computadores - Aula 03
Organização de Computadores - Aula 03Organização de Computadores - Aula 03
Organização de Computadores - Aula 03thomasdacosta
 
Organização de Computadores - Aula 01
Organização de Computadores - Aula 01Organização de Computadores - Aula 01
Organização de Computadores - Aula 01thomasdacosta
 
Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06thomasdacosta
 
Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05thomasdacosta
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 
Programação Concorrente - Aula 07
Programação Concorrente - Aula 07Programação Concorrente - Aula 07
Programação Concorrente - Aula 07thomasdacosta
 
Programação Concorrente - Aula 06
Programação Concorrente - Aula 06Programação Concorrente - Aula 06
Programação Concorrente - Aula 06thomasdacosta
 
Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04thomasdacosta
 
Redes de Computadores - Aula 05
Redes de Computadores - Aula 05Redes de Computadores - Aula 05
Redes de Computadores - Aula 05thomasdacosta
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Javathomasdacosta
 
Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03thomasdacosta
 
Redes de Computadores - Aula 04
Redes de Computadores - Aula 04Redes de Computadores - Aula 04
Redes de Computadores - Aula 04thomasdacosta
 
Redes de Computadores - Aula 03
Redes de Computadores - Aula 03Redes de Computadores - Aula 03
Redes de Computadores - Aula 03thomasdacosta
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02thomasdacosta
 
Programação Concorrente - LAB 01
Programação Concorrente - LAB 01Programação Concorrente - LAB 01
Programação Concorrente - LAB 01thomasdacosta
 
Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01thomasdacosta
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01thomasdacosta
 

Mais de thomasdacosta (20)

Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Programação de Sistemas Distribuídos - Aula 01
Programação de Sistemas Distribuídos - Aula 01Programação de Sistemas Distribuídos - Aula 01
Programação de Sistemas Distribuídos - Aula 01
 
Organização de Computadores - Aula 02
Organização de Computadores - Aula 02Organização de Computadores - Aula 02
Organização de Computadores - Aula 02
 
Organização de Computadores - Aula 03
Organização de Computadores - Aula 03Organização de Computadores - Aula 03
Organização de Computadores - Aula 03
 
Organização de Computadores - Aula 01
Organização de Computadores - Aula 01Organização de Computadores - Aula 01
Organização de Computadores - Aula 01
 
Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06
 
Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
Programação Concorrente - Aula 07
Programação Concorrente - Aula 07Programação Concorrente - Aula 07
Programação Concorrente - Aula 07
 
Programação Concorrente - Aula 06
Programação Concorrente - Aula 06Programação Concorrente - Aula 06
Programação Concorrente - Aula 06
 
Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04
 
Redes de Computadores - Aula 05
Redes de Computadores - Aula 05Redes de Computadores - Aula 05
Redes de Computadores - Aula 05
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03
 
Redes de Computadores - Aula 04
Redes de Computadores - Aula 04Redes de Computadores - Aula 04
Redes de Computadores - Aula 04
 
Redes de Computadores - Aula 03
Redes de Computadores - Aula 03Redes de Computadores - Aula 03
Redes de Computadores - Aula 03
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02
 
Programação Concorrente - LAB 01
Programação Concorrente - LAB 01Programação Concorrente - LAB 01
Programação Concorrente - LAB 01
 
Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 

Algoritmos e Estrutura de Dados - Aula 04

  • 1. ANHANGUERA – 2016.1 ALGORITMOS E ESTRUTURA DE DADOS AULA 04 – RECURSÃO Prof. Thomás da Costa thomascosta@aedu.com
  • 2. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa RECURSÃO RECURSÃO
  • 3. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa O que é: É quando uma função, invoca a si mesma para resolver um problema em uma instância menor. RECURSÃO Recursividade
  • 4. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa Mais detalhes: - É quando uma função invoca a si mesmo. - As chamadas devem possuir um fim. - O programa pode ficar em um loop infinito. - Dependendo da sua forma de utilização, pode ser lento. - Existe uma pilha de execução. - Simplifica algumas lógicas de programação. - Programas recursivos são complexos. - Possuem grande semelhança com instruções de laços. - Muito cuidado: existe um limite para uma função chamar a si próprio. - Esse limite é definido por cada compilador e linguagem. Vamos ver um exemplo !!! RECURSÃO Recursividade
  • 5. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo de Fatorial: No nosso exemplo vamos utilizar fatorial !!! O que é fatorial? É o produto de todos os seus antecessores, incluindo si próprio e excluindo o zero Exemplo: 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720 FATORIAL DE 6 É 720 !!! RECURSÃO Recursividade
  • 6. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa #include <iostream> using namespace std; int calcular_fatorial(int valor); int main() { cout << "Valor do fatorial:" << calcular_fatorial(6); } int calcular_fatorial(int valor) { if (valor == 0) return 1; else { valor = (valor * calcular_fatorial(valor - 1)); cout << valor << endl; return valor; } } Chamada recursiva Vamos ver o programa passo-a-passo, analisando a pilha de execução
  • 7. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa ... int calcular_fatorial(int valor) { if (valor == 0) return 1; else { valor = (valor * calcular_fatorial(valor - 1)); cout << valor << endl; return valor; } } calcular_fatorial(6) -> valor = (6 * calcular_fatorial(5)); calcular_fatorial(5) -> valor = (5 * calcular_fatorial(4)); calcular_fatorial(4) -> valor = (4 * calcular_fatorial(3)); calcular_fatorial(3) -> valor = (3 * calcular_fatorial(2)); calcular_fatorial(2) -> valor = (2 * calcular_fatorial(1)); calcular_fatorial(1) -> valor = (1 * calcular_fatorial(0)); calcular_fatorial(0) -> return 1; Pilha de execução Fim da recursividade
  • 8. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa ... int calcular_fatorial(int valor) { if (valor == 0) return 1; else { valor = (valor * calcular_fatorial(valor - 1)); cout << valor << endl; return valor; } } calcular_fatorial(6) -> valor = (6 * 5 * 4 * 3 * 2 * 1 * 1); calcular_fatorial(5) -> valor = (5 * 4 * 3 * 2 * 1 * 1); calcular_fatorial(4) -> valor = (4 * 3 * 2 * 1 * 1); calcular_fatorial(3) -> valor = (3 * 2 * 1 * 1); calcular_fatorial(2) -> valor = (2 * 1 * 1); calcular_fatorial(1) -> valor = (1 * 1); calcular_fatorial(0) -> return 1;
  • 9. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplo de Potenciação: No próximo exemplo, vamos ver como criar um programa de potenciação. O que é potenciação? É o produto de um número por ele mesmo, em uma quantidade de vezes definida. Exemplo: 5³ = 5 * 5 * 5 = 125 POTÊNCIA DE 5 É 125 !!! RECURSÃO Recursividade
  • 10. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa #include <iostream> using namespace std; int potencia(int base, int expoente); int main() { int base = 5; int expoente = 3; cout << "Potencia:" << potencia(base, expoente); } int potencia(int base, int expoente) { if (expoente == 0) return 1; else { int valor = base * potencia(base, expoente - 1); cout << valor << endl; return valor; } } Chamada recursiva
  • 11. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa Exemplos: • Analisamos alguns exemplos estudados em Programação Estruturada II. • Vamos praticar um pouco mais. • Vamos começar !!! RECURSÃO Recursividade
  • 12. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa RECURSÃO Exercícios Encontrar o valor máximo de um elemento de um vetor com N posições.
  • 13. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa #include <iostream> using namespace std; int maximo_vetor(int v[], int n); int main() { int vetor[10] = { 2, 1, 10, 6, 1, 9, 1, 1, 0, 3 }; cout << maximo_vetor(vetor, 10); } int maximo_vetor(int v[], int n) { if (n == 1) return v[0]; else { int x; x = maximo_vetor(v, n-1); if (x > v[n-1]) return x; else return v[n-1]; } }
  • 14. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa RECURSÃO Exercícios Efetuar a soma de um vetor utilizando recursão.
  • 15. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa #include <iostream> using namespace std; int soma(int v[], int n); int main() { int soma_vetor[5] = { 8, 0, 1, 3, 5}; cout << soma(soma_vetor, 5); } int soma(int v[], int n) { if (n == 0) return 0; else { int s = soma(v, n-1); if (v[n-1] > 0) s += v[n-1]; return s; } }
  • 16. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa - É quando uma função invoca a si mesmo. - As chamadas devem possuir um fim. - O programa pode ficar em um loop infinito. - Dependendo da sua forma de utilização, pode ser lento. - Existe uma pilha de execução. - Simplifica algumas lógicas de programação. - Programas recursivos são complexos. - Possuem grande semelhança com instruções de laços. - Muito cuidado: existe um limite para uma função chamar a si próprio. RECURSÃO Resumo