3. Recursividade
O que é:
É quando uma função, invoca a si mesma para resolver um problema em uma
instância menor.
Recursividade
Prof. Thomás da Costa Programação Estruturada II
4. 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 !!!
5. 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 = 720
FATORIAL DE 6 É 720 !!!
Recursividade
Prof. Thomás da Costa Programação Estruturada II
6. 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
7. 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
8. 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;
9. 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 = 125
POTÊNCIA DE 5 É 125 !!!
Recursividade
Prof. Thomás da Costa Programação Estruturada II
10. #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
11. 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
12. Recursividade
Prof. Thomás da Costa Programação Estruturada II
Semestre concluído !!! Parabéns a todos !!!
THANKS FOR STUDYING