08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

notas de aula -<br />

Jerônimo C. Pellegrini<br />

O procedimento hand->string aceita um parâmetro (hand) e verifica se o parâmetro<br />

é uma lista, depois verifica se a lista passada é vazia. Se for, nada faz porque não há<br />

elementos a mostrar. Se a lista não for vazia, motra o primeiro e pula uma linha. Em<br />

seguida, o procedimento chama a si mesmo. Nesta segunda chamada, o argumento é<br />

(cdr hand).<br />

1.6.1 Recursão linear, iteração linear e recursão na cauda<br />

Procedimentos recursivos podem precisar de memória auxiliar a cada chamada recursiva.<br />

Esta seção descreve dois tipos de processo que podem resultar destes procedimentos:<br />

• Processo de recursão linear, em que cada chamada recursiva exige a alocação de<br />

mais memória;<br />

• Processo de iteração linear, que precisa de uma quantidade constante de memória,<br />

não dependendo do número de chamadas recursivas realizadas.<br />

Esta seção trata destes dois tipos de processo. Começaremos <strong>com</strong> um exemplo de<br />

procedimento que gera um processo recursivo linear. O seguinte procedimento calcula a<br />

potência de um número <strong>com</strong> expoente inteiro:<br />

( define power *<br />

( lambda (x n)<br />

(if (= n 1)<br />

x<br />

(* x ( power * x (- n 1))))))<br />

O encadeamento de chamadas recursivas feitas por este procedimento para os argumentos<br />

3 e 5 é:<br />

Versão Preliminar<br />

(power* (3 5)<br />

(* 3 (power* 3 4))<br />

(* 3 (* 3 (power* 3 3)))<br />

(* 3 (* 3 (* 3 (power* 3 2))))<br />

(* 3 (* 3 (* 3 (* 3 (power* 3 1)))))<br />

(* 3 (* 3 (* 3 (* 3 3))))<br />

(* 3 (* 3 (* 3 9)))<br />

(* 3 (* 3 27))<br />

(* 3 81)<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!