12
Aula Prática 5 Recursão Monitoria 2011.2

Aula Prática 5 Recursão Monitoria 2011.2. Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria. Uma função assim

Embed Size (px)

Citation preview

Page 1: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Aula Prática 5

Recursão

Monitoria 2011.2

Page 2: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.

Uma função assim é chamada função recursiva.

Page 3: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

CUIDADO! Todo cuidado é pouco ao se fazer funções

recursivas. A primeira coisa a se providenciar é um critério de parada.

Este vai determinar quando a função deverá parar de chamar a si mesma.

Isto impede que a função se chame infinitas vezes.

Page 4: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Estrutura Básicatipo funcao(parametros){

tipo retorno; if(Condição de parada) {

... } else //recursão

{ // atribuição não é obrigatória retorno = funcao(parametrosNovos);

} return retorno;

}

Page 5: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Exemplo Uma função que calcule o fatorial de um número

inteiro n é um bom exemplo de uma função recursiva:

Page 6: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Note que, enquanto n não menor ou igual a 1, a função fat chama a si mesma, cada vez com um valor menor. N<=1 é critério de parada para esta função.

Page 7: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Vantagens da Recursão Solução mais simples de alguns

problemas;

Em geral, códigos mais concisos;

Caso não seja usada, é necessário manter o controle das variáveis manualmente (book keeping)

Page 8: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Desvantagens da Recursão Funções recursivas são mais lentas que

funções iterativas, pois muitas chamadas consecutivas a funções são feitas;

Erros de implementação podem levar a chamadas infinitas. Isto é, caso não seja indicada uma condição de parada, ou se esta condição nunca for satisfeita, entre outros.

Page 9: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

DÚVIDAS?

Page 10: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Exercícios Faça um programa que receba dois números e um tipo de operação

(+, -, /, *). Encontre o valor de cada um desses números através de uma função recursiva mostrada abaixo, depois realize a operação

informada pelo usuário entre os dois novos números. F(x) = x + (x-2) + (x-4) + (x-6) + .... + 1, Parando em 1 ou 0.

Ex:x=4 e y =3

operacao = * F(4) = 4 + 2 + 0 = 6 F(3) = 3 + 1 = 4

Saida = 6 * 4 = 24

Page 11: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Exercícios Faça um programa que calcule

recursivamente a soma dos digitos de um inteiro positivo.

Ex:x = 1324.

Resultado = 1+3+2+4 = 10

Page 12: Aula Prática 5 Recursão Monitoria 2011.2.  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim

Exercícios A conjectura de collatz estabelece uma seqüência de números, ou

trajetória, que a partir de um número natural inicial obedece aos seguintes critérios: 1. Se o número for par seu sucessor na seqüência será sua metade 2. Se o número for ímpar seu sucessor será uma unidade superior ao seu

triplo. A conjectura diz que toda sequencia terminará em 1. Imprima a sequencia de numeros de forma que o primeiro número será o

digitado pelo usuário e o último será o numero 1. Obs: Suponha que 0 < n <= 100.