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 - Jerônimo C. Pellegrini<br />

(test-stats test-data)<br />

(1 1)<br />

1.9.2 Laços e indução<br />

Os procedimentos que desenvolvemos até agora eram simples o suficiente para que<br />

possamos crer em sua corretude. Há algoritmos cuja corretude não é óbvia.<br />

O procedimento power visto na seção 1.6.1 não é muito eficiente. O algoritmo que ele<br />

usa é:<br />

⎧<br />

⎨1 se n = 0,<br />

power(x, n) =<br />

⎩x (power(x, n − 1)) caso contrário.<br />

Quando chamado <strong>com</strong> argumentos x, n, fará n chamadas recursivas. O seguinte procedimento<br />

também calcula a potência de números reais <strong>com</strong> expoentes inteiros, mas fará<br />

log 2<br />

(n) chamadas recursivas:<br />

⎧<br />

1 se n = 0,<br />

⎪⎨<br />

fast_power(x, n) = x ( fast_power(x, ⌊n/2⌋) 2) se n é ímpar,<br />

⎪⎩ fast_power(x, ⌊n/2⌋) 2 caso contrário.<br />

Não é imediatamente claro que este procedimento realmente calcula a potência x n , e<br />

menos ainda que fará log 2<br />

(n) chamadas recursivas. É importante, então, conseguirmos<br />

demonstrar que o procedimento realmente retornará o valor que queremos. Provaremos<br />

aqui a corretude do procedimento fast_power (ou seja, que fast_power(x, n) = x n para<br />

todo x ∈ R e para todo n ∈ N). A prova é por indução em n.<br />

A base de indução é trivialmente verdadeira: para n = 0, temos fast_power(x, n) = 1.<br />

Nossa hipótese de indução é: fast_power(x, k) = x k para 0 k n − 1.<br />

Versão Preliminar<br />

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

39

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

Saved successfully!

Ooh no, something went wrong!