programação estruturada 2 - aula 06
TRANSCRIPT
Programação Estruturada II
Aula 06 – Recursividade
Prof. Thomás da [email protected]
Anhanguera – 2015.1
Recursividade
O que é:
É quando uma função, invoca a si mesma para resolver um problema em umainstância menor.
Recursividade
Prof. Thomás da Costa Programação Estruturada II
Recursividade
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
Recursividade
Prof. Thomás da Costa Programação Estruturada II
Vamos ver um exemplo !!!
Recursividade
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 = 720FATORIAL DE 6 É 720 !!!
Recursividade
Prof. Thomás da Costa Programação Estruturada II
Prof. Thomás da Costa Programação Estruturada II
Exemplo 1
#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
Prof. Thomás da Costa Programação Estruturada II
Exemplo 1
...
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
Prof. Thomás da Costa Programação Estruturada II
Exemplo 1
...
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;
Recursividade
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 = 125POTÊNCIA DE 5 É 125 !!!
Recursividade
Prof. Thomás da Costa Programação Estruturada II
#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;
}
}
Prof. Thomás da Costa Programação Estruturada II
Exemplo 2
Chamada recursiva
Recursividade
Resumo:
Vamos relembrar os itens do começo da aula:
- É 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
Recursividade
Prof. Thomás da Costa Programação Estruturada II
Recursividade
Prof. Thomás da Costa Programação Estruturada II
Semestre concluído !!! Parabéns a todos !!!
THANKS FOR STUDYING