Recursividade

12
Recursividade Função recursiva é aquela que chama a si própria. Também pode ser considerado, se chamar outras funções que, em algum momento, chamem a primeira função, tornando esse conjunto de funções um processo recursivo. É um recurso de programação que pode ser usada na linguagem C, Java, Visual Basic, entre outras.

description

Recursividade. Função recursiva é aquela que chama a si própria . Também pode ser considerado, se chamar outras funções que, em algum momento, chamem a primeira função, tornando esse conjunto de funções um processo recursivo. - PowerPoint PPT Presentation

Transcript of Recursividade

Page 1: Recursividade

Recursividade

• Função recursiva é aquela que chama a si própria.

• Também pode ser considerado, se chamar outras funções que, em algum momento, chamem a primeira função, tornando esse conjunto de funções um processo recursivo.

• É um recurso de programação que pode ser usada na linguagem C, Java, Visual Basic, entre outras.

Page 2: Recursividade

• As funções recursivas são soluções mais elegantes e simples, se comparadas a funções tradicionais, já que executam tarefas repetitivas sem utilizar nenhuma estrutura de repetição, como for ou while.

• Essa elegância e simplicidade têm um preço que requer muita atenção em sua implementação.

Recursividade

Page 3: Recursividade

Recursividade

• Uma função pode chamar a si própria por um número limitado de vezes.

• Esse limite é dado pelo tamanho da pilha. Se o valor correspondente ao tamanho máximo da pilha for atingido, haverá um estouro da pilha ou “Stack Overflow.

• Cada vez que uma função é chamada de forma recursiva, são alojados e armazenados uma cópia dos seus parâmetros, de modo a não perder os valores dos parâmetros das chamadas anteriores.

Page 4: Recursividade

Funções recursivas contem duas partes fundamentais:

• Ponto de Parada ou Condição de Parada: é o ponto onde a função será encerrada.

• Regra Geral: é o método que reduz a resolução do problema através da invocação recursiva de casos menores, que por sua vez são resolvidos pela resolução de casos ainda menores pela própria função, assim sucessivamente até atingir o “ponto de parada” que finaliza a função.

Page 5: Recursividade

Exemplo de função recursiva: cálculo do somatório

#include <iostream>using namespace std;int soma(int x) { int y; if( x == 0 ) { cout <<x << " ) \n"; return 0; } else { cout <<" ( "<< x << " + "; y = x + soma(x -1); cout <<"soma parcial = "<<y<<"\n"; return y; }}int main() { int num; cout << "Digite o numero: "; cin >> num;; cout<<"\nA soma de 0 ate "<<num <<" = "<<soma(num)<<"\n"; system("pause"); return 0; }

Page 6: Recursividade

Demonstrativo Somatório

5

5+Soma(5-1)

5+(4+Soma(4-1))

5+(4+(3+Soma(3-1)))

5+(4+(3+(2+Soma(2-1))))

15

5+10

5+(4+6)

5+(4+(3+3)

5+(4+(3+(2 +1)))

Page 7: Recursividade

1. Fazer uma função recursiva que calcule o fatorial de um número. O número deverá ser lido no programa principal.

Demonstrativo da solução:

5!

5*4!

4*3!

3*2!

2*1!

1

120

5*(24)

4*(6)

3*(2)

2*(1)

1*(1)

Exercícios:

Page 8: Recursividade

2. O que fará e qual será o resultado do exercício abaixo?

//Recursividade na Linguagem C#include <math.h>#include <iostream>using namespace std;int funcao(int x) { cout << "\n" << x; if(abs(x) < 10 ) return 1; else return(1 + funcao(x/10)); }int main() { int num; num=10145; cout <<" Total: " << funcao(num); system ("pause"); return 0;}

Exercícios:

Page 9: Recursividade

3. Fazer um programa que leia,some 2 valores inteiros e mostre o resultado da soma. No final do programa, deverá ter uma recursividade que chame novamente o programa principal, mostre a mensagem “Digite 1 se desejar executar o programa novamente”,caso positivo, executar o programa novamente caso negativo, terminar a execução do programa.

Exercícios:

Page 10: Recursividade

4. Questão da prova do ENADE 2008.

Os termos da seqüência de Fibonacci são definidos por:Fibonacci(0) = 0

Fibonacci(1) = 1

Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)

 

Uma solução recursiva para o cálculo do i-ésimo termo da seqüência é dada pela função a seguir.

 

1 funcao fibonacci(inteiro longo n)

2 se((n=0) OU (n=1)) entao

3 retorne n

4 senao

5 retorne fibonacci(n-1) + fibonacci(n-2)

6 fim se

7 fim

 

Exercícios:

Page 11: Recursividade

(continuação exercício 4):

Acerca da execução recursiva dessa função, assinale a opção incorreta.

A)À medida que o valor de n cresce, há um aumento no número de chamadas recursivas.

B)O método recursivo é o mais eficiente para o cálculo do i-ésimo termo da seqüência de Fibonacci, pois realiza duas chamadas por passo da recursão, cada uma mais simples do que a chamada original.

C)Na linha 5, a ordem de execução é calcular o valor para fibonacci(n-1) e somente depois calcular o valor para fibonacci(n-2).

D)As condições de parada da recursão são: o valor de n é 0 ou o valor de n é 1.

Exercícios:

Page 12: Recursividade

• fazer exercício que leia um numero, calcule em uma função a soma deste numero de 0 ate o numero lido em uma função e mostre a soma deste numero.