A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Professor Luiz José Hoffmann Filho

Apresentações semelhantes


Apresentação em tema: "Professor Luiz José Hoffmann Filho"— Transcrição da apresentação:

1 Professor Luiz José Hoffmann Filho ljhfilho@gmail.com
Recursividade Professor Luiz José Hoffmann Filho 1

2 Tópicos Principais Recursão Funções Recursivas Definições recursivas
Implementação Comportamento 2

3 Motivação Recursividade é uma idéia inteligente que desempenha um papel central na programação funcional e na ciência da computação em geral. Recursividade é o mecanismo de programação no qual uma definição de função ou de outro objeto refere-se ao próprio objeto sendo definido. Assim função recursiva é uma função que é definida em termos de si mesma. Recursividade é o mecanismo básico para repetições nas linguagens funcionais. São sinônimos: recursividade, recursão, recorrência. 4/39

4 Estratégia Estratégia para a definição recursiva de uma função:
dividir o problema em problemas menores do mesmo tipo resolver os problemas menores (dividindo-os em problemas ainda menores, se necessário) combinar as soluções dos problemas menores para formar a solução final Ao dividir o problema sucessivamente em problemas menores eventualmente os casos simples são alcançados: não podem ser mais divididos suas soluções são definidas explicitamente 1 2 3 5/39

5 • Em uma definição recursiva um item é definido em termos
Definições Recursivas • Em uma definição recursiva um item é definido em termos de si mesmo, ou seja, o item que está sendo definido aparece como parte da definição; • Em todas as funções recursivas existe: – Caso base (um ou mais) cujo resultado é imediatamente conhecido. – Passo recursivo em que se tenta resolver um sub-problema do problema inicial. 3

6 • Exemplo: o fatorial de um número
Definições Recursivas • Exemplo: o fatorial de um número Caso BASE n! = 1, se n = 0  n× (n − 1)!, se n > 0 Passo Recursivo 4

7 • Exercício: forneça a definição recursiva para a operação
Definições Recursivas • Exercício: forneça a definição recursiva para a operação de potenciação Caso BASE xn = 1, se n = 0  x * x(n-1), se n > 0 Passo Recursivo 5

8 • Definição: Funções Recursivas
– Uma função recursiva é aquela que faz uma chamada para si mesma. Essa chamada pode ser: • direta: uma função A chama a ela própria • indireta: função A chama uma função B que, por sua vez, chama A /* Recursao direta */ void func_rec(int n) { ... func_rec(n-1); } 6

9 • Exemplo: função recursiva para cálculo de fatorial
Funções Recursivas • Exemplo: função recursiva para cálculo de fatorial n! = 1, se n = 0  n * (n − 1)!, se n > 0 /* Função recursiva para cálculo do fatorial */ int fat (int n) { Caso BASE if (n==0) return 1; else return n*fat(n-1); Passo Recursivo } 7

10 • Exemplo: função recursiva para cálculo de potenciação
Funções Recursivas • Exemplo: função recursiva para cálculo de potenciação xn = 1, se n = 0  x * x(n-1), se n > 0 /* Função recursiva para cálculo de potenciacao */ int pot (int x, int n) { Caso BASE if (n==0) return 1; else return x*pot(x,n-1); Passo Recursivo } 8

11 • Comportamento: Funções Recursivas
– quando uma função é chamada recursivamente, cria-se um ambiente local para cada chamada – as variáveis locais de chamadas recursivas são independentes entre si, como se estivéssemos chamando funções diferentes 9

12 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

13 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) - 2 f fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

14 1 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

15 1 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; f fat(0)n - r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

16 1 1 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; f fat(0)n 1 r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; - 1 f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

17 1 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; 1 - f fat(1)n } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

18 2 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) 2 f fat(2)n { } - 3 f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

19 6 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { } 6 3 - f fat(3)n r main n int f; if (n==0) f=1; else f= n*fat(n-1); return f;

20 6 3 Funções Recursivas #include <stdio.h> int fat (int n);
int main (void) { int n = 3; int r; r = fat ( n ); printf("Fatorial de %d = %d \n", n, r); return 0; } /* Função recursiva para cálculo do fatorial */ int fat (int n) { int f; if (n==0) f=1; else f= n*fat(n-1); r 6 return f; main n 3 }

21 Funções Recursivas Exemplo: Série de fibonacci 19

22 • Exemplo: série de Fibonacci
Funções Recursivas • Exemplo: série de Fibonacci /* Calculo da serie de Fibonacci */ int fib (int n) { if (n==0) return 0; else if (n==1) return 1; else return (fib(n-1) + fib(n-2)); } 20

23 Exercícios Crie a função recursiva para calcular o terminal de um número n, definido da seguinte maneira: A multiplicação de números naturais pode ser definida da segunte forma: 21

24 Exercícios Determine o que o seguinte procedimento recursivo computa. Escreva um procedimento não recursivo (ou iterativo) para para solucionar o mesmo problema. Funcao(n) { se n = 0 entao retorne 0 senao retorne n + Funcao (n-1) 21

25 Exercícios Implemente um algoritmo para calcular o fatorial 21

26 Exercícios - Desafio Elaborar um algoritmo iterativo para o Problema da Torre de Hanói. Elaborar um algoritmo recursivo para o Problema da Torre de Hanói. 21


Carregar ppt "Professor Luiz José Hoffmann Filho"

Apresentações semelhantes


Anúncios Google