1 / 14

Recursão

Recursão. Computer Science – A Structured Programming Approach Using C Behrouz A. Forouzna & Richard F. Gilberg Heinle Cengage - 3ª. Edição. Definição de recursão. Recursão é um processo repetitivo no qual uma função chama ela mesma. Exemplo: definição de fatorial recursivo

errin
Download Presentation

Recursão

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recursão Computer Science – A Structured Programming Approach Using C Behrouz A. Forouzna & Richard F. Gilberg Heinle Cengage - 3ª. Edição

  2. Definição de recursão • Recursão é um processo repetitivo no qual uma função chama ela mesma. Exemplo: definição de fatorial recursivo Note que a solução recursiva para um problema envolve um caminho de dois sentidos: primeiro o problema é decomposto no sentido top/down e depois resolvido no sentido bottom/up.

  3. Decomposição do Fatorial(3) Fatorial(3) = 3 * 2 = 6 Fatorial(3) = 3 * Fatorial(2) Fatorial(2) = 2 * Fatorial(1) Fatorial(2) = 2 * 1 = 2 Fatorial(1) = 1*Fatorial(0) Fatorial(1) = 1*1 = 1 Fatorial(0)=1

  4. Solução Iterativa /* soluçao iterativa para o calculo do fatorial */ long Fatorial(int n) { // declarações locais long factN = 1; int i; for (i = 1; i <= n; i++) factN = factN * i; return factN; } //fim fatorial

  5. Solução recursiva /* soluçao recursiva para o calculo do fatorial */ long Fatorial(int n) { // declarações locais if (n == 0) return 1; else return (n*Fatorial(n-1)); } //fim fatorial

  6. Projeto para implementar funções recursivas Toda função recursiva possui dois elementos: • Resolver parte do problema (caso base) ou • Reduzir o tamanho do problema (caso geral). No caso do nosso exemplo, Fatorial(0) é o caso base

  7. Regras para projetar uma função recursiva • Determinar o caso base; • Determinar o caso geral; • Combinar o caso base e o caso geral na função. Atenção: Cada chamada da função deve reduzir o tamanho do problema e movê-lo em direção do caso base. O caso base deve terminar sem chamar a função recursiva; isto é, executar um return.

  8. Números de Fibonacci Números de Fibonacci são uma série na qual cada número é a soma dos dois números anteriores: 0, 1, 1, 2, 3, 5, ..... Para iniciar a série é preciso conhecer os dois primeiros números.

  9. Generalização da série de Fibonacci Dados (caso base): Fibonacci0 = 0; Fibonacci1 = 1; Então (caso geral): Fibonaccin = Fibonaccin-1 + Fibonaccin-2

  10. 1 1 Generalização de Fibonacci4 Fib4 Fib3 + Fib2 Fib2 + Fib1 Fib1 + Fib0 Fib1 + Fib0 0 1 0

  11. Long fib(int n) { if (n == 0 || n == 1) // caso base return n; return (fib(n-1) + fib(n-2)); // caso geral } Exercício 1) Escreva uma função que determine a serie de Fibbonacci com n termos.

  12. Limitações da recursão • Soluções recursivas podem envolver alto overhead devido à chamada de funções; • A cada chamada da função recursiva, espaço de memória ( na pilha) é alocada. Se o número de chamada recursiva é muito grande, pode não ter espaço suficiente na pilha para executar o programa (segment fault)

  13. Limitações da recursão • As funções para determinar o fatorial e a serie de Fibonacci são melhores implementadas por funções iterativas; Isto significa que soluçoes iterativas são sempre melhores que as recursivas???? NÃO: ALGUNS ALGORITMOS SÃO MAIS FACEIS DE IMPLEMENTAR USANDO RECURSÃO E SÃO MAIS EFICIENTES

  14. Exercícios • Escreva um programa que, dado o valor n, imprima os primeiros n termos da serie de Fibonacci usando a função recursiva long fib(int n). • Reescreva a função long fib(int n), na forma iterativa. • Avalie o tempo de resposta dos programas.

More Related