• Nenhum resultado encontrado

INF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1

N/A
N/A
Protected

Academic year: 2021

Share "INF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1"

Copied!
24
0
0

Texto

(1)

12/03/2014 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2

(2)

12/03/2014 (c) Dept. Informática - PUC-Rio 2

Tópicos Principais

• Recursão

• Definições recursivas

• Funções Recursivas

• Implementação

• Comportamento

(3)

12/03/2014 (c) Dept. Informática - PUC-Rio 3

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.

(4)

12/03/2014 (c) Dept. Informática - PUC-Rio 4

Definições Recursivas

• Exemplo: o fatorial de um número

0

,

)!

1

(

0

,

1

!

n

se

n

n

n

se

n

Caso BASE Caso BASE Passo Recursivo

(5)

12/03/2014 (c) Dept. Informática - PUC-Rio 5

Definições Recursivas

• Exercício: forneça a definição recursiva para a operação

de potenciação

0

,

0

,

1

) 1 (

n

se

x

x

n

se

x

n n Caso BASE Caso BASE Passo Recursivo

(6)

12/03/2014 (c) Dept. Informática - PUC-Rio 6

Funções Recursivas

• Definição:

– 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); ... }

(7)

12/03/2014 (c) Dept. Informática - PUC-Rio 7

/* Função recursiva para cálculo do fatorial */ int fat (int n)

{ if (n==0) return 1; else return n*fat(n-1); }

Funções Recursivas

• Exemplo: função recursiva para cálculo de fatorial

0

,

)!

1

(

0

,

1

!

n

se

n

n

n

se

n

Caso BASE Passo Recursivo

(8)

12/03/2014 (c) Dept. Informática - PUC-Rio 8

/* Função recursiva para cálculo de potenciacao */ int pot (int x, int n)

{ if (n==0) return 1; else return x*pot(x,n-1); }

Funções Recursivas

• Exemplo: função recursiva para cálculo de potenci ação

Caso BASE

Passo Recursivo

(9)

12/03/2014 (c) Dept. Informática - PUC-Rio 9

Funções Recursivas

• Comportamento:

– 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

(10)

12/03/2014 (c) Dept. Informática - PUC-Rio 10

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); return f; }

-

3

-

3

n r main n f fat(3)

(11)

12/03/2014 (c) Dept. Informática - PUC-Rio 11

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); return f; }

-

2

-

3

-

3

n r main n f fat(3) n f fat(2)

(12)

12/03/2014 (c) Dept. Informática - PUC-Rio 12

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); return f; }

-

1

-

2

-

3

-

3

n r main n f fat(3) n f fat(2) n f fat(1)

(13)

12/03/2014 (c) Dept. Informática - PUC-Rio 13

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); return f; }

-

0

-

1

-

2

-

3

-

3

n r main n f fat(3) n f fat(2) n f fat(1) n f fat(0)

(14)

12/03/2014 (c) Dept. Informática - PUC-Rio 14

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); return f; }

1

0

-

1

-

2

-

3

-

3

n r main n f fat(3) n f fat(2) n f fat(1) n f fat(0)

(15)

12/03/2014 (c) Dept. Informática - PUC-Rio 15

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); return f; }

1

1

-

2

-

3

-

3

n r main n f fat(3) n f fat(2) n f fat(1)

(16)

12/03/2014 (c) Dept. Informática - PUC-Rio 16

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); return f; }

2

2

-

3

-

3

n r main n f fat(3) n f fat(2)

(17)

12/03/2014 (c) Dept. Informática - PUC-Rio 17

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); return f; }

6

3

-

3

n r main n f fat(3)

(18)

12/03/2014 (c) Dept. Informática - PUC-Rio 18

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); return f; }

6

3

n r main

(19)

12/03/2014 (c) Dept. Informática - PUC-Rio 19

Funções Recursivas

• Exemplo: série de Fibonacci



fib(n)

0, se n

0

1, se n

1

fib(n

1)

fib(n

2), se n

1











Passo Recursivo Caso BASE 2 casos

(20)

12/03/2014 (c) Dept. Informática - PUC-Rio 20

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)); }

(21)

12/03/2014 (c) Dept. Informática - PUC-Rio 21

Cadeias de caracteres

• Funções recursivas para manipular cadeias de

caracteres:

– baseiam-se em uma definição recursiva

de cadeias de caracteres:

Uma cadeia de caracteres é:

• a cadeia de caracteres vazia; ou

(22)

12/03/2014 (c) Dept. Informática - PUC-Rio 22

Cadeias de caracteres

• Implementação recursiva da função “imprime” e imprime

invertido:

void imprime_rec (char* s) { if (s[0] != '\0') {

printf(“%c”, s[0]); imprime_rec(&s[1]); }

}

void imprime_inv (char* s) { if (s[0] != '\0') {

imprime_inv(&s[1]); printf(“%c”, s[0]); }

(23)

12/03/2014 (c) Dept. Informática - PUC-Rio 23

Cadeias de caracteres

• Implementação recursiva da função “comprimento”:

int comprimento_rec (char* s) { if (s[0] == '\0') return 0; else return 1 + comprimento_rec(&s[1]); }

(24)

12/03/2014 (c) Dept. Informática - PUC-Rio 24

Referências

Waldemar Celes, Renato Cerqueira, José Lucas Rangel,

Introdução a Estruturas de Dados, Editora Campus

(2004)

Referências

Documentos relacionados

Revela-se, ainda, de crucial importância o reforço da articulação entre as diferentes componentes de formação, designadamente, através do tratamento das diversas matérias de

Cálculo dos limites de controle Avaliação da estabilidade do processo Avaliação da capacidade do processo Ação local Ação sobre as causas especiais Ação no sistema Ação sobre

Buscando agregar qualidade ao vinho do VSF e a obtenção de produto diferenciado e de melhor estabilidade, esta pesquisa testou a aplicação de tecnologias de

con casquillo de tornillos E27 o E40, montado sobre un tapón hermético de material aislante (Oyster 3) o sobre palque metálico (Oyster 1-2), completo con un dispositivo para

O presente trabalho se propôs à apresentar ações relativas à atuação do Alto Comissariado das Nações Unidas para Direitos Humanos (ACNUDH), dentro do

Gerenciamento estratégico da informação: aumente a competitividade e a eficiência de sua empresa utilizando a informação como uma ferramenta estratégica.. OLIVEIRA, Djalma de

Desenvolve de forma autónoma e precisa as actividades relacionadas com a preparação de trabalho, operação, controlo e manutenção de uma ou mais máquinas- ferramenta

condenação da ré ao pagamento das horas extras laboradas acima da 8ª diária ou 44ª semanal, de forma não cumulativa, acrescidas do adicional legal ou convencional, se mais