programação estruturada 2 - aula 06

13
Programação Estruturada II Aula 06 – Recursividade Prof. Thomás da Costa [email protected] Anhanguera – 2015.1

Upload: thomas-da-costa

Post on 22-Jul-2015

100 views

Category:

Technology


0 download

TRANSCRIPT

Programação Estruturada II

Aula 06 – Recursividade

Prof. Thomás da [email protected]

Anhanguera – 2015.1

Recursividade

RECURSIVIDADE

Prof. Thomás da Costa Programação Estruturada II

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

Recursividade

Obrigado !!!

Prof. Thomás da Costa Programação Estruturada II