• Nenhum resultado encontrado

PROGRAMAÇÃO E ALGORITMOS (LEI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

N/A
N/A
Protected

Academic year: 2021

Share "PROGRAMAÇÃO E ALGORITMOS (LEI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017"

Copied!
14
0
0

Texto

(1)

PROGRAMAÇÃO E ALGORITMOS

(LEI)

Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

(2)

Resumo

¨

Recursividade

¤

Definição

¤

Tipos de Recursividade

¤

Exemplos

¤

Exercícios

(3)

Recursividade

¨

Em linguagens imperativas e estruturadas, o

conceito base é a função:

¤ Unidade lógica de código (conjunto finito de blocos) que desempenha determinada funcionalidade.

¤ Função para calcular o máximo de um vector, mostrar resultados no écran, pedir dados ao utilizador,…

¨

A linguagem C é um exemplo clássico de uma

linguagem de programação imperativa, estruturada em

funções.

(4)

Recursividade

¨ Ao mandar executar uma função, são reservados pelo sistema

operativo recursos para as variáveis e instruções a executar.

¨ É conveniente pensar nas funções por nós programadas (no

código-fonte), como algo que vai ser copiado e posteriormente executado.

¤ O que é executado são cópias das “nossas” funções.

¨ De cada vez que é encontrada uma chamada a uma função,

são reservados os recursos necessários e transferida a execução para as respectivas instruções.

¨ Quando a execução da função termina, regressa ao local a

(5)

Recursividade

¨

Exemplo:

void fun1(){ linha 1; linha 2; } void fun2(){ linha3; fun1(); linha 4; } main(){ fun1(); fun2(); }

¨ A sequência de instruções executadas será:

¤ Linha 1, 2, 3, 1, 2, 4

(6)

Recursividade

¨ Em termos de definição, uma função diz-se recursiva se

contiver dentro dela uma chamada à própria função:

void funcao(){ linha 1; linha 2; funcao(); linha 3; linha4; }

(7)

Recursividade

¨ O exemplo anterior executaría indefinidamente as linhas 1 e

2, pelo que não podería sequer ser considerado um algoritmo (conjunto finito de passos ordenados).

¨ Para uma função recursiva estar bem formada:

¤ Tem que possuir um critério de paragem antes da chamada

recursiva.

¤ O valor de retorno (caso o tenha) da chamada recursiva tem que

ser utilizado dentro da própria função.

¨ O critério de paragem é uma condição que determina se a chamada

(8)

Recursividade

¨ Critério de Paragem. Exemplo:

void funcao(int u){

printf(“%d”,u);

if (u<100)

funcao(u+1); }

¨ É importante garantir que o critério de paragem esteja

colocado antes das chamadas recursivas e que seja sempre atingido.

¨ No exemplo acima, bastaría que em vez de u+1 estivesse u-1,

(9)

Recursividade

¨ Exemplo de uma função recursiva para calcular o factorial de

um número.

¤ O factorial de 7=7*6*5*4*3*2*1

¤ Como (6*5*4*3*2*1) é o factorial de 6, podemos concluir que:

n Factorial 7= 7 * Factorial 6. int factorial(int n){

int x;

if (n<=1) //critério de paragem

return(1);

x=factorial(n-1); //chamada recursiva

return(n*x); //utilização do valor recursivo

(10)

Recursividade

¨

As funções recursivas seguem normalmente uma

estratégia de “Divide e Conquista”.

¤ Um problema pode ser decomposto em sub-problemas de menor dimensão.

¤ Cada chamada à função recursiva deve fazer apenas uma pequena parte do trabalho, que será terminado pelas

chamadas recursivas subsequentes.

¤ Após todas as chamadas à função, o problema deverá ter sido tratado na globalidade.

(11)

Tipos de Recursividade

¨

Recursividade Linear: Diz-se que uma função é

linearmente recursiva se em cada execução da

função apenas existe uma chamada recursiva.

¨ funcao1() ¤ funcao1() n funcao1() n funcao1() n funcao1() § funcao1() § funcao1() § ...

(12)

Recursividade

¨ Recursividade Mútua existe quando 2 funções se chamam

entre si, apesar de eventualmente nenhuma delas ter uma chamada à própria função.

¨ Exemplo: Determinar se um número é par ou impar.

int par(){ if (n==0) return(1); return(!impar(n-1)) } int impar(){ if (n==1) return(1); return(!par(n-1)); }

(13)

Recursividade

¨

Diz-se que uma função é de Recursividade

Exponencial se for feita mais que uma chamada à

própria função, durante a sua execução.

¤ Leva normalmente a custos computacionais elevados. ¤ Funcao1() n Funcao1() n Funcao1() n Funcao1() n Funcao1() n Funcao1() n Funcao1() n Funcao1() n Funcao1() n ...

(14)

Recursividade

¨

O termo Recursividade Terminal aplica-se quando o

último passo feito por uma função é a chamada

recursiva.

¨ Funcao 1() ¤ Linhas 1,2,3 ¤ Funcao 1() n Linhas 1,2,3 n Funcao1() n ...

¨

São normalmente funções que fácilmente se

transformam em iterativas.

Referências

Documentos relacionados

A Projetação Ergonômica permitiu elaborar as seguintes recomendações: (a) instalação de um portão automatizado, para evitar o esforço físico do operador e as dores

A Câmara deliberou por unanimidade e em minuta aprovar a minuta do presente protocolo e dar poderes ao Senhor Presidente para outorgar na sua

A reparação endovascular da aorta abdominal (EVAR) pode ser utilizada como uma solução a curto prazo para controlo da hemorragia em pacientes hemodinamicamente

Dando continuidade ao estudo de Paswan e Young (2002), Vieira et al (2008) analisaram os determinantes da satisfação geral dos alunos de Ciências Contábeis da

O estudo teve como objetivo inicial realizar as análises nos postos de trabalho de uma indústria de artefatos em aço para identificar as posturas básicas adotadas pelos

procedimento de liquidação e cobrança da competência dos serviços de apoio da ERC (cf.. recurso hierárquico para o Presidente da ERC – já o recurso

O programa de relações humanas, em geral, se refere ao ambiente de trabalho e a formação da consciência de grupo, objetivando o estabelecimento de um ambiente o mais

A Administradora deverá contratar (i) o Consultor Especializado Tático para prestar serviços de consultoria especializada com a finalidade de dar suporte e subsidiar a