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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula -<br />

Jerônimo C. Pellegrini<br />

( list-insert-tail-rec-aux elt lst pos ( list )))))<br />

Embora o procedimento seja recursivo na cauda, o argumento left, cresce a cada<br />

chamada recursiva. Além disso, o procedimento ficou menos legível e há uma chamada a<br />

reverse, que na versão inicial não era necessária. Este exemplo ilustra um fato importante:<br />

nem sempre podemos construir procedimentos recursivos que não precisem de memória<br />

auxiliar 11 .<br />

1.6.2 Exemplo: aproximação da razão áurea<br />

A razão áurea, normalmente denotada por ϕ, é um número irracional que aparece naturalmente<br />

em proporções na natureza e é empregado em artes, arquitetura e eventualmente<br />

em Computação 12 é a solução para a equação a+b<br />

a = a/b, e é igual a 1+√ 5<br />

2<br />

. Apesar de<br />

conhecermos φ em função de √ 5, sabemos também que<br />

ϕ = 1 +<br />

1<br />

1 +<br />

1<br />

1+ 1 . ..<br />

e portanto podemos aproximar a razão áurea (sem usar qualquer outro número irracional)<br />

por frações iteradas:<br />

ϕ 0 = 1<br />

ϕ 1 = 1 + 1/ϕ 0 = 2<br />

ϕ 2 = 1 + 1/ϕ 1 = 1.5<br />

ϕ 3 = 1 + 1/ϕ 2 = 1.66<br />

.<br />

Versão Preliminar<br />

Quanto maior o índice i, mais perto o valor ϕ i estará da razão áurea ϕ. Para obter uma<br />

aproximação <strong>com</strong> garantia de precisão mínima, basta verificar a diferença ε = |ϕ i+1 − ϕ i |.<br />

Como esta diferença diminui a cada iteração, ela eventualmente atingirá um valor pequeno<br />

o suficiente para ser considerado aceitável.<br />

( define calcula-phi<br />

11 Na verdade é possível criar um procedimento que insere um elemento em uma lista sem o uso de memória<br />

auxiliar, mas isto só é possível usando mudança de estado – algo de que só tratamos no Capítulo 3.<br />

12 Por exemplo, em funções de hashing, conforme sugerido por Knuth [18] e mencionado por Berman e Paul [19]<br />

e Cormen, Leiserson e Rivest [20] em suas discussões sobre tabelas de hashing.<br />

27<br />

[ 27 de outubro de 2010 at 15:47 ]

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

Saved successfully!

Ooh no, something went wrong!